From af25a1b592b39af0f542127e6c33bbeb0ac83b5a Mon Sep 17 00:00:00 2001 From: Verkister Date: Thu, 28 Jan 2021 13:34:18 +0200 Subject: [PATCH 1/9] New advanced Egg Release mechanics. -The vore release eggs are no longer reskinned lockers, but storage items that can have their contents either dumped or pulled out, but the stuff can't be put back into a cracked shell. -A live prey in an egg will have the egg scaled according to their size, and they can get out by resisting. -Also now items can be egged, either one at a time or all at once. The single item eggs are scaled according to the contained item's size class and take the same amount of storage space as the item itself would. -Full stuff eggs are a little more lenient on the size and weight, basically for the reason that one prey's full outfit could fit in one backpack sized egg rather than going full macro based on the total weight. -Also there's a whole bunch of new egg type options and some better looking sprites coming. -Also the new eggs can be picked up and even trash-eaten. -The old locker eggs still exist in the code and can be spawned should anyone have a need for one. --- code/_helpers/global_lists_vr.dm | 65 +++++-- .../objects/items/weapons/storage/egg_vr.dm | 166 ++++++++++++++++++ .../crates_lockers/closets/egg_vr.dm | 8 +- .../client/preference_setup/vore/03_egg.dm | 24 ++- code/modules/vore/eating/belly_obj_vr.dm | 3 + .../vore/eating/bellymodes_datum_vr.dm | 4 +- code/modules/vore/eating/bellymodes_vr.dm | 56 ++++++ code/modules/vore/eating/vorepanel_vr.dm | 16 +- icons/obj/egg_new_vr.dmi | Bin 0 -> 12719 bytes icons/obj/egg_open_vr.dmi | Bin 0 -> 11762 bytes icons/obj/egg_vr.dmi | Bin 6235 -> 6242 bytes vorestation.dme | 1 + 12 files changed, 312 insertions(+), 31 deletions(-) create mode 100644 code/game/objects/items/weapons/storage/egg_vr.dm create mode 100644 icons/obj/egg_new_vr.dmi create mode 100644 icons/obj/egg_open_vr.dmi diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 862a562b391..2e4068f31f7 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -117,21 +117,57 @@ var/global/list/global_vore_egg_types = list( "Human" = HUMAN_EGG, "Slime" = SLIME_EGG, "Egg" = EGG_EGG, - "Xenochimera" = XENOCHIMERA_EGG, - "Xenomorph" = XENOMORPH_EGG) + "Xenochimera" = XENOCHIMERA_EGG, + "Xenomorph" = XENOMORPH_EGG, + "Chocolate" = CHOCOLATE_EGG, + "Boney" = BONEY_EGG, + "Slime glob" = SLIMEGLOB_EGG, + "Chicken" = CHICKEN_EGG, + "Synthetic" = SYNTHETIC_EGG, + "Cooking error" = BADRECIPE_EGG, + "Escape pod" = ESCAPEPOD_EGG, + "Web cocoon" = COCOON_EGG, + "Bug cocoon" = BUGCOCOON_EGG, + "Rock" = ROCK_EGG, + "Yellow" = YELLOW_EGG, + "Blue" = BLUE_EGG, + "Green" = GREEN_EGG, + "Orange" = ORANGE_EGG, + "Purple" = PURPLE_EGG, + "Red" = RED_EGG, + "Rainbow" = RAINBOW_EGG, + "Spotted pink" = PINKSPOTS_EGG) var/global/list/tf_vore_egg_types = list( - "Unathi" = /obj/structure/closet/secure_closet/egg/unathi, - "Tajara" = /obj/structure/closet/secure_closet/egg/tajaran, - "Akula" = /obj/structure/closet/secure_closet/egg/shark, - "Skrell" = /obj/structure/closet/secure_closet/egg/skrell, - "Sergal" = /obj/structure/closet/secure_closet/egg/sergal, - "Nevrean" = /obj/structure/closet/secure_closet/egg/nevrean, - "Human" = /obj/structure/closet/secure_closet/egg/human, - "Slime" = /obj/structure/closet/secure_closet/egg/slime, - "Egg" = /obj/structure/closet/secure_closet/egg, - "Xenochimera" = /obj/structure/closet/secure_closet/egg/scree, - "Xenomorph" = /obj/structure/closet/secure_closet/egg/xenomorph) + "Unathi" = /obj/item/weapon/storage/vore_egg/unathi, + "Tajara" = /obj/item/weapon/storage/vore_egg/tajaran, + "Akula" = /obj/item/weapon/storage/vore_egg/shark, + "Skrell" = /obj/item/weapon/storage/vore_egg/skrell, + "Sergal" = /obj/item/weapon/storage/vore_egg/sergal, + "Nevrean" = /obj/item/weapon/storage/vore_egg/nevrean, + "Human" = /obj/item/weapon/storage/vore_egg/human, + "Slime" = /obj/item/weapon/storage/vore_egg/slime, + "Egg" = /obj/item/weapon/storage/vore_egg, + "Xenochimera" = /obj/item/weapon/storage/vore_egg/scree, + "Xenomorph" = /obj/item/weapon/storage/vore_egg/xenomorph, + "Chocolate" = /obj/item/weapon/storage/vore_egg/chocolate, + "Boney" = /obj/item/weapon/storage/vore_egg/owlpellet, + "Slime glob" = /obj/item/weapon/storage/vore_egg/slimeglob, + "Chicken" = /obj/item/weapon/storage/vore_egg/chicken, + "Synthetic" = /obj/item/weapon/storage/vore_egg/synthetic, + "Cooking error" = /obj/item/weapon/storage/vore_egg/badrecipe, + "Escape pod" = /obj/item/weapon/storage/vore_egg/escapepod, + "Web cocoon" = /obj/item/weapon/storage/vore_egg/cocoon, + "Bug cocoon" = /obj/item/weapon/storage/vore_egg/bugcocoon, + "Rock" = /obj/item/weapon/storage/vore_egg/rock, + "Yellow" = /obj/item/weapon/storage/vore_egg/yellow, + "Blue" = /obj/item/weapon/storage/vore_egg/blue, + "Green" = /obj/item/weapon/storage/vore_egg/green, + "Orange" = /obj/item/weapon/storage/vore_egg/orange, + "Purple" = /obj/item/weapon/storage/vore_egg/purple, + "Red" = /obj/item/weapon/storage/vore_egg/red, + "Rainbow" = /obj/item/weapon/storage/vore_egg/rainbow, + "Spotted pink" = /obj/item/weapon/storage/vore_egg/pinkspots) var/global/list/edible_trash = list(/obj/item/broken_device, /obj/item/clothing/accessory/collar, //TFF 10/7/19 - add option to nom collars, @@ -182,7 +218,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/fancy/crayons, /obj/item/weapon/storage/fancy/egg_box, - /obj/item/weapon/storage/wallet) + /obj/item/weapon/storage/wallet, + /obj/item/weapon/storage/vore_egg) var/global/list/contamination_flavors = list( "Generic" = contamination_flavors_generic, diff --git a/code/game/objects/items/weapons/storage/egg_vr.dm b/code/game/objects/items/weapons/storage/egg_vr.dm new file mode 100644 index 00000000000..5b35c776b24 --- /dev/null +++ b/code/game/objects/items/weapons/storage/egg_vr.dm @@ -0,0 +1,166 @@ +//Item type vorepanel egg release containers. + +/obj/item/weapon/storage/vore_egg + name = "egg" + desc = "It's an egg; it's smooth to the touch." //This is the default egg. + icon = 'icons/obj/egg_new_vr.dmi' + icon_state = "egg" + var/open_egg_icon = 'icons/obj/egg_open_vr.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', + ) + w_class = 0 + max_w_class = 0 + show_messages = 0 + allow_quick_empty = TRUE + use_sound = 'sound/items/drop/flesh.ogg' + +/obj/item/weapon/storage/vore_egg/open(mob/user as mob) + icon = open_egg_icon + ..() + +/obj/item/weapon/storage/vore_egg/unathi + name = "unathi egg" + desc = "Some species of Unathi apparently lay soft-shelled eggs!" + icon_state = "egg_unathi" + +/obj/item/weapon/storage/vore_egg/nevrean + name = "nevrean egg" + desc = "Most Nevreans lay hard-shelled eggs!" + icon_state = "egg_nevrean" + +/obj/item/weapon/storage/vore_egg/human + name = "human egg" + desc = "Some humans lay eggs that are--wait, what?" + icon_state = "egg_human" + +/obj/item/weapon/storage/vore_egg/tajaran + name = "tajaran egg" + desc = "Apparently that's what a Tajaran egg looks like. Weird." + icon_state = "egg_tajaran" + +/obj/item/weapon/storage/vore_egg/skrell + name = "skrell egg" + desc = "Its soft and squishy" + icon_state = "egg_skrell" + +/obj/item/weapon/storage/vore_egg/shark + name = "akula egg" + desc = "Its soft and slimy to the touch" + icon_state = "egg_akula" + +/obj/item/weapon/storage/vore_egg/sergal + name = "sergal egg" + desc = "An egg with a slightly fuzzy exterior, and a hard layer beneath." + icon_state = "egg_sergal" + +/obj/item/weapon/storage/vore_egg/slime + name = "slime egg" + desc = "An egg with a soft and squishy interior, coated with slime." + icon_state = "egg_slime" + +/obj/item/weapon/storage/vore_egg/special //Not actually used, but the sprites are in, and it's there in case any admins need to spawn in the egg for any specific reasons. + name = "special egg" + desc = "This egg has a very unique look to it." + icon_state = "egg_unique" + +/obj/item/weapon/storage/vore_egg/scree + name = "Chimera egg" + desc = "...You don't know what type of creature laid this egg." + icon_state = "egg_scree" + +/obj/item/weapon/storage/vore_egg/xenomorph + name = "Xenomorph egg" + desc = "Some type of pitch black egg. It has a slimy exterior coating." + icon_state = "egg_xenomorph" + +/obj/item/weapon/storage/vore_egg/chocolate + name = "chocolate egg" + desc = "Delicious. May contain a choking hazard." + icon_state = "egg_chocolate" + +/obj/item/weapon/storage/vore_egg/owlpellet + name = "boney egg" + desc = "Can an egg shell be made of bones and hair?" + icon_state = "egg_pellet" + +/obj/item/weapon/storage/vore_egg/slimeglob + name = "glob of slime" + desc = "Very squishy." + icon_state = "egg_slimeglob" + +/obj/item/weapon/storage/vore_egg/chicken + name = "chicken egg" + desc = "Looks like chickens come in all sizes and shapes." + icon_state = "egg_chicken" + +/obj/item/weapon/storage/vore_egg/synthetic + name = "synthetic egg" + desc = "Can robots lay eggs?" + icon_state = "egg_synthetic" + +/obj/item/weapon/storage/vore_egg/badrecipe + name = "Burned mess" + desc = "Someone didn't cook this egg quite right..." + icon_state = "egg_badrecipe" + +/obj/item/weapon/storage/vore_egg/escapepod + name = "small escape pod" + desc = "Someone left in a hurry." + icon_state = "egg_escapepod" + +/obj/item/weapon/storage/vore_egg/cocoon + name = "web cocoon" + desc = "It straight up smells like spiders in here." + icon_state = "egg_cocoon" + +/obj/item/weapon/storage/vore_egg/bugcocoon + name = "bug cocoon" + desc = "Metamorphosis!" + icon_state = "egg_bugcocoon" + +/obj/item/weapon/storage/vore_egg/rock + name = "rock egg" + desc = "It looks like a small boulder." + icon_state = "egg_rock" + +/obj/item/weapon/storage/vore_egg/yellow + name = "yellow egg" + desc = "It is a nice yellow egg." + icon_state = "egg_yellow" + +/obj/item/weapon/storage/vore_egg/blue + name = "blue egg" + desc = "It is a nice blue egg." + icon_state = "egg_blue" + +/obj/item/weapon/storage/vore_egg/green + name = "green egg" + desc = "It is a nice green egg." + icon_state = "egg_green" + +/obj/item/weapon/storage/vore_egg/orange + name = "orange egg" + desc = "It is a nice orange egg." + icon_state = "egg_orange" + +/obj/item/weapon/storage/vore_egg/purple + name = "purple egg" + desc = "It is a nice purple egg." + icon_state = "egg_purple" + +/obj/item/weapon/storage/vore_egg/red + name = "red egg" + desc = "It is a nice red egg." + icon_state = "egg_red" + +/obj/item/weapon/storage/vore_egg/rainbow + name = "rainbow egg" + desc = "It looks so colorful." + icon_state = "egg_rainbow" + +/obj/item/weapon/storage/vore_egg/pinkspots + name = "spotted pink egg" + desc = "It is a cute pink egg with white spots." + icon_state = "egg_pinkspots" \ No newline at end of file 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 ba0809f6381..cb87bbce013 100644 --- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm @@ -37,10 +37,10 @@ /obj/structure/closet/secure_closet/egg/nevrean name = "nevarean egg" - desc = "Most Nevareans lay hard-shelled eggs!" - icon_state = "egg_nevarean" - icon_closed = "egg_nevarean" - icon_opened = "egg_nevarean_open" + desc = "Most Nevreans lay hard-shelled eggs!" + icon_state = "egg_nevrean" + icon_closed = "egg_nevrean" + icon_opened = "egg_nevrean_open" /obj/structure/closet/secure_closet/egg/human name = "human egg" diff --git a/code/modules/client/preference_setup/vore/03_egg.dm b/code/modules/client/preference_setup/vore/03_egg.dm index 648b31b3995..284726c4f1d 100644 --- a/code/modules/client/preference_setup/vore/03_egg.dm +++ b/code/modules/client/preference_setup/vore/03_egg.dm @@ -1,14 +1,32 @@ var/UNATHI_EGG = "Unathi" -var/TAJARAN_EGG = "Tajaran" +var/TAJARAN_EGG = "Tajaran" var/AKULA_EGG = "Akula" var/SKRELL_EGG = "Skrell" var/SERGAL_EGG = "Sergal" var/HUMAN_EGG = "Human" var/NEVREAN_EGG = "nevrean" var/SLIME_EGG = "Slime" -var/EGG_EGG = "Egg" -var/XENOCHIMERA_EGG = "Xenochimera" +var/EGG_EGG = "Egg" +var/XENOCHIMERA_EGG = "Xenochimera" var/XENOMORPH_EGG = "Xenomorph" +var/CHOCOLATE_EGG = "Chocolate" +var/BONEY_EGG = "Boney" +var/SLIMEGLOB_EGG = "Slime glob" +var/CHICKEN_EGG = "Chicken" +var/SYNTHETIC_EGG = "Synthetic" +var/BADRECIPE_EGG = "Cooking error" +var/ESCAPEPOD_EGG = "Escape pod" +var/COCOON_EGG = "Web cocoon" +var/BUGCOCOON_EGG = "Bug cocoon" +var/ROCK_EGG = "Rock" +var/YELLOW_EGG = "Yellow" +var/BLUE_EGG = "Blue" +var/GREEN_EGG = "Green" +var/ORANGE_EGG = "Orange" +var/PURPLE_EGG = "Purple" +var/RED_EGG = "Red" +var/RAINBOW_EGG = "Rainbow" +var/PINKSPOTS_EGG = "Spotted pink" // Define a place to save appearance in character setup /datum/preferences diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index a3417dd0ac7..d2175154973 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -38,6 +38,9 @@ var/fancy_vore = FALSE // Using the new sounds? var/is_wet = TRUE // Is this belly's insides made of slimy parts? var/wet_loop = TRUE // Does the belly have a fleshy loop playing? + var/obj/item/weapon/storage/vore_egg/ownegg // Is this belly creating an egg? + var/egg_type = "egg" // Default egg type and path. + var/egg_path = /obj/item/weapon/storage/vore_egg //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. //Actual full digest modes diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 30fe4fd33a5..9b9a5bbaa7c 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -132,8 +132,8 @@ GLOBAL_LIST_INIT(digest_modes, list()) // E G G /datum/digest_mode/egg id = DM_EGG - +/* /datum/digest_mode/egg/process_mob(obj/belly/B, mob/living/carbon/human/H) if(!istype(H) || H.stat == DEAD || H.absorbed) return null - B.put_in_egg(H, 1) + B.put_in_egg(H, 1)*/ \ No newline at end of file diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 16cf298e253..427cc1b6590 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -99,6 +99,62 @@ var/digestion_noise_chance = 0 var/list/touchable_mobs = list() + if(digest_mode == DM_EGG) + var/list/egg_contents = list() + for(var/E in touchable_atoms) + if(istype(E, /obj/item/weapon/storage/vore_egg)) // Don't egg other eggs. + continue + if(isliving(E)) + var/mob/living/L = E + if(L.absorbed) + continue + egg_contents += L + if(isitem(E)) + egg_contents += E + if(egg_contents.len) + if(!ownegg) + if(owner.vore_egg_type in tf_vore_egg_types) + egg_type = owner.vore_egg_type + egg_path = tf_vore_egg_types[egg_type] + ownegg = new egg_path(src) + for(var/atom/movable/C in egg_contents) + if(isitem(C) && egg_contents.len == 1) //Only egging one item + var/obj/item/I = C + ownegg.w_class = I.w_class + ownegg.max_storage_space = ownegg.w_class + I.forceMove(ownegg) + ownegg.icon_scale_x = 0.2 * ownegg.w_class + ownegg.icon_scale_y = 0.2 * ownegg.w_class + ownegg.update_transform() + egg_contents -= I + ownegg = null + break + if(isliving(C)) + var/mob/living/M = C + ownegg.w_class = M.size_multiplier * 4 //Egg size and weight scaled to match occupant. + var/obj/item/weapon/holder/H = new M.holder_type(ownegg) + H.held_mob = M + M.forceMove(H) + ownegg.max_storage_space = H.w_class + ownegg.icon_scale_x = 0.25 * ownegg.w_class + ownegg.icon_scale_y = 0.25 * ownegg.w_class + ownegg.update_transform() + egg_contents -= M + ownegg = null + break + C.forceMove(ownegg) + if(isitem(C)) + var/obj/item/I = C + ownegg.w_class += I.w_class //Let's assume a regular outfit can reach total w_class of 20. + ownegg.calibrate_size() + ownegg.orient2hud() + ownegg.w_class = clamp(ownegg.w_class * 0.2, 1, 8) //A total w_class of 20 will result in a backpack sized egg. + ownegg.icon_scale_x = 0.2 * ownegg.w_class + ownegg.icon_scale_y = 0.2 * ownegg.w_class + ownegg.update_transform() + ownegg = null + return list("to_update" = to_update, "touchable_mobs" = touchable_mobs, "digestion_noise_chance" = digestion_noise_chance) + for(var/A in touchable_atoms) //Handle stray items if(isitem(A) && !did_an_item) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index f6540097269..086c5270f7c 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -236,7 +236,7 @@ // Host is inside someone else, and is trying to interact with something else inside that person. if("pick_from_inside") return pick_from_inside(usr, params) - + // Host is trying to interact with something in host's belly. if("pick_from_outside") return pick_from_outside(usr, params) @@ -267,7 +267,7 @@ host.vore_selected = NB unsaved_changes = TRUE return TRUE - + if("bellypick") host.vore_selected = locate(params["bellypick"]) return TRUE @@ -403,11 +403,11 @@ if(!(target in OB)) return TRUE // Aren't here anymore, need to update menu - + var/intent = "Examine" if(isliving(target)) intent = alert("What do you want to do to them?","Query","Examine","Help Out","Devour") - + else if(istype(target, /obj/item)) intent = alert("What do you want to do to that?","Query","Examine","Use Hand") @@ -505,7 +505,7 @@ host.vore_selected.transfer_contents(target, choice, 1) return TRUE return - + var/atom/movable/target = locate(params["pick"]) if(!(target in host.vore_selected)) return TRUE // Not in our X anymore, update UI @@ -602,7 +602,7 @@ if(!toggle_addon) return FALSE host.vore_selected.mode_flags ^= host.vore_selected.mode_flag_list[toggle_addon] - host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on + host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on . = TRUE if("b_item_mode") var/list/menu_list = host.vore_selected.item_digest_modes.Copy() @@ -632,7 +632,7 @@ host.vore_selected.contamination_color = new_color host.vore_selected.items_preserved.Cut() //To re-contaminate for new color . = TRUE - if("b_desc") + if("b_desc") var/new_desc = html_encode(input(usr,"Belly Description ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc) as message|null) if(new_desc) @@ -865,6 +865,6 @@ qdel(host.vore_selected) host.vore_selected = host.vore_organs[1] . = TRUE - + if(.) unsaved_changes = TRUE \ No newline at end of file diff --git a/icons/obj/egg_new_vr.dmi b/icons/obj/egg_new_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b938cc7eb45d5dc00cda9a03835d9acb895481e4 GIT binary patch literal 12719 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 LDM{9de+l|Ok{gCG literal 0 HcmV?d00001 diff --git a/icons/obj/egg_open_vr.dmi b/icons/obj/egg_open_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e3faabb4dc2b068b8c55f56756022cd3a8fb971a GIT binary patch literal 11762 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 Y?nuM25ch^Z1JfIHBpi*BTJUb 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 i9B!jQl%~>@&`Uy* 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 T%HdTA^SFBX`laFvj* Date: Thu, 28 Jan 2021 13:43:45 +0200 Subject: [PATCH 2/9] small edit and a typo fixy --- .../crates_lockers/closets/egg_vr.dm | 2 +- icons/obj/egg_new_vr.dmi | Bin 12719 -> 12593 bytes 2 files changed, 1 insertion(+), 1 deletion(-) 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 cb87bbce013..dabc8fd88bb 100644 --- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm @@ -36,7 +36,7 @@ icon_opened = "egg_unathi_open" /obj/structure/closet/secure_closet/egg/nevrean - name = "nevarean egg" + name = "nevrean egg" desc = "Most Nevreans lay hard-shelled eggs!" icon_state = "egg_nevrean" icon_closed = "egg_nevrean" diff --git a/icons/obj/egg_new_vr.dmi b/icons/obj/egg_new_vr.dmi index b938cc7eb45d5dc00cda9a03835d9acb895481e4..a8b000fc91b52348d9c8a6415811f45de58fd47b 100644 GIT binary patch delta 12341 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 NSxH5SO0lp0{{g767$X1x From f69a2ed6de8a95e27e19b48d3a717a45b15ee43c Mon Sep 17 00:00:00 2001 From: Verkister Date: Thu, 28 Jan 2021 13:54:57 +0200 Subject: [PATCH 3/9] e --- icons/obj/egg_new_vr.dmi | Bin 12593 -> 12590 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/egg_new_vr.dmi b/icons/obj/egg_new_vr.dmi index a8b000fc91b52348d9c8a6415811f45de58fd47b..b9804d69baf338b851874753db8b26af4562a54d 100644 GIT binary patch delta 319 zcmV-F0l@yTVyfFDZ*Bkpc$}5e!A`?43;-i~J8Z9j+|(qYZXBF+V{gx47mz?Q$|aFL{jn{t;d%dZI6;3rv}e*1B|!&I_YZAz ziDM1W!FJO&fuaxf_9zuAK?f`He$_T()B+tmw#}R3Ot<@Y^MAS|tRb3cqO%evlMTyk zloj7mjkZim%qEJ{!e|R6^=Jz%9A`3)HGV8MTAY$ieo~TIG>6~yu5CtQyg~=t-QDJP zekKe!D!G_#|G6Me7^_WZVy0@MDsD1X5Zy$^<={AzXBlkznrfgLok>%1m?_I>t6H3h zt>|I#|Ik-rmNSbjn2qb_m5c)x#pI2fFDZ*Bkpc$}5eu}%Xq34z{rfmjdyg~=-&E4vD zz9;lJD7lzz|G6Me7^_WZVy0@MDsD7Z5Zy?|<={AxXX$PFnrfgL-Jja~6BUPW$6kn8uQ&mf!RecE>Gj U5Bv5L_7;?K8&_C3vsD4vFMe;G!vFvP From 1f4bf2bf3eb35c208612bd101a0e3394eab692c1 Mon Sep 17 00:00:00 2001 From: Verkister Date: Thu, 28 Jan 2021 18:50:16 +0200 Subject: [PATCH 4/9] Fixes item-contained prey not un-muffling --- code/modules/vore/eating/belly_obj_vr.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index d2175154973..8032e7707bc 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -289,6 +289,10 @@ //Place them into our drop_location M.forceMove(drop_location()) + for(var/mob/living/L in M.contents) + L.muffled = 0 + for(var/obj/item/weapon/holder/H in M.contents) + H.held_mob.muffled = 0 items_preserved -= M From 396028e9a18761fe4371c21839b61ba5fc0fe3d9 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 29 Jan 2021 00:22:41 +0200 Subject: [PATCH 5/9] percussive maintenance? --- code/modules/vore/eating/belly_obj_vr.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 8032e7707bc..e5d11bc42b1 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -287,13 +287,14 @@ if (!(M in contents)) return 0 // They weren't in this belly anyway - //Place them into our drop_location - M.forceMove(drop_location()) for(var/mob/living/L in M.contents) L.muffled = 0 for(var/obj/item/weapon/holder/H in M.contents) H.held_mob.muffled = 0 + //Place them into our drop_location + M.forceMove(drop_location()) + items_preserved -= M //Special treatment for absorbed prey From 7b1c399a73a8bbe040c797792c2354018eebccf7 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 29 Jan 2021 14:55:17 +0200 Subject: [PATCH 6/9] Eggy reworks and fixes --- code/_helpers/global_lists_vr.dm | 31 --------- .../objects/items/weapons/storage/egg_vr.dm | 39 ++++++++++- .../client/preference_setup/vore/03_egg.dm | 35 +--------- .../vore/eating/bellymodes_datum_vr.dm | 62 ++++++++++++++++- code/modules/vore/eating/bellymodes_vr.dm | 69 +++---------------- 5 files changed, 109 insertions(+), 127 deletions(-) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 2e4068f31f7..6af71afacfb 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -107,37 +107,6 @@ var/global/list/fancy_release_sounds = list( "None" = null ) -var/global/list/global_vore_egg_types = list( - "Unathi" = UNATHI_EGG, - "Tajaran" = TAJARAN_EGG, - "Akula" = AKULA_EGG, - "Skrell" = SKRELL_EGG, - "Nevrean" = NEVREAN_EGG, - "Sergal" = SERGAL_EGG, - "Human" = HUMAN_EGG, - "Slime" = SLIME_EGG, - "Egg" = EGG_EGG, - "Xenochimera" = XENOCHIMERA_EGG, - "Xenomorph" = XENOMORPH_EGG, - "Chocolate" = CHOCOLATE_EGG, - "Boney" = BONEY_EGG, - "Slime glob" = SLIMEGLOB_EGG, - "Chicken" = CHICKEN_EGG, - "Synthetic" = SYNTHETIC_EGG, - "Cooking error" = BADRECIPE_EGG, - "Escape pod" = ESCAPEPOD_EGG, - "Web cocoon" = COCOON_EGG, - "Bug cocoon" = BUGCOCOON_EGG, - "Rock" = ROCK_EGG, - "Yellow" = YELLOW_EGG, - "Blue" = BLUE_EGG, - "Green" = GREEN_EGG, - "Orange" = ORANGE_EGG, - "Purple" = PURPLE_EGG, - "Red" = RED_EGG, - "Rainbow" = RAINBOW_EGG, - "Spotted pink" = PINKSPOTS_EGG) - var/global/list/tf_vore_egg_types = list( "Unathi" = /obj/item/weapon/storage/vore_egg/unathi, "Tajara" = /obj/item/weapon/storage/vore_egg/tajaran, diff --git a/code/game/objects/items/weapons/storage/egg_vr.dm b/code/game/objects/items/weapons/storage/egg_vr.dm index 5b35c776b24..6eef606929a 100644 --- a/code/game/objects/items/weapons/storage/egg_vr.dm +++ b/code/game/objects/items/weapons/storage/egg_vr.dm @@ -20,6 +20,22 @@ icon = open_egg_icon ..() +/obj/item/weapon/storage/vore_egg/proc/hatch(mob/living/user as mob) + visible_message("\The [src] begins to shake as something pushes out from within!") + animate_shake() + if(do_after(user, 50)) + if(use_sound) + playsound(src, src.use_sound, 50, 0, -5) + animate_shake() + drop_contents() + icon = open_egg_icon + +/obj/item/weapon/storage/vore_egg/proc/animate_shake() + var/init_px = pixel_x + var/shake_dir = pick(-1, 1) + animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1) + animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING) + /obj/item/weapon/storage/vore_egg/unathi name = "unathi egg" desc = "Some species of Unathi apparently lay soft-shelled eggs!" @@ -163,4 +179,25 @@ /obj/item/weapon/storage/vore_egg/pinkspots name = "spotted pink egg" desc = "It is a cute pink egg with white spots." - icon_state = "egg_pinkspots" \ No newline at end of file + icon_state = "egg_pinkspots" + +/obj/item/weapon/holder/attack_hand(mob/living/user as mob) + if(istype(src.loc, /obj/item/weapon/storage/vore_egg)) //Don't scoop up the egged mob + src.pickup(user) + user.drop_from_inventory(src) + return + ..() + +/obj/item/weapon/holder/container_resist(mob/living/held) + if(istype(src.loc, /obj/item/weapon/storage/vore_egg)) + var/obj/item/weapon/storage/vore_egg/E = src.loc + if(isbelly(E.loc)) + var/confirm = alert(held, + "Are you sure you wish to hatch inside your captor?", + "Confirmation", + "Proceed", "Cancel") + if(!confirm == "Proceed") + return + E.hatch(held) + return + ..() \ No newline at end of file diff --git a/code/modules/client/preference_setup/vore/03_egg.dm b/code/modules/client/preference_setup/vore/03_egg.dm index 284726c4f1d..b01cc1c26e6 100644 --- a/code/modules/client/preference_setup/vore/03_egg.dm +++ b/code/modules/client/preference_setup/vore/03_egg.dm @@ -1,33 +1,3 @@ -var/UNATHI_EGG = "Unathi" -var/TAJARAN_EGG = "Tajaran" -var/AKULA_EGG = "Akula" -var/SKRELL_EGG = "Skrell" -var/SERGAL_EGG = "Sergal" -var/HUMAN_EGG = "Human" -var/NEVREAN_EGG = "nevrean" -var/SLIME_EGG = "Slime" -var/EGG_EGG = "Egg" -var/XENOCHIMERA_EGG = "Xenochimera" -var/XENOMORPH_EGG = "Xenomorph" -var/CHOCOLATE_EGG = "Chocolate" -var/BONEY_EGG = "Boney" -var/SLIMEGLOB_EGG = "Slime glob" -var/CHICKEN_EGG = "Chicken" -var/SYNTHETIC_EGG = "Synthetic" -var/BADRECIPE_EGG = "Cooking error" -var/ESCAPEPOD_EGG = "Escape pod" -var/COCOON_EGG = "Web cocoon" -var/BUGCOCOON_EGG = "Bug cocoon" -var/ROCK_EGG = "Rock" -var/YELLOW_EGG = "Yellow" -var/BLUE_EGG = "Blue" -var/GREEN_EGG = "Green" -var/ORANGE_EGG = "Orange" -var/PURPLE_EGG = "Purple" -var/RED_EGG = "Red" -var/RAINBOW_EGG = "Rainbow" -var/PINKSPOTS_EGG = "Spotted pink" - // Define a place to save appearance in character setup /datum/preferences var/vore_egg_type = "Egg" //The egg type they have. @@ -44,8 +14,7 @@ var/PINKSPOTS_EGG = "Spotted pink" S["vore_egg_type"] << pref.vore_egg_type /datum/category_item/player_setup_item/vore/egg/sanitize_character() - var/valid_vore_egg_types = global_vore_egg_types - pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, valid_vore_egg_types, initial(pref.vore_egg_type)) + pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, tf_vore_egg_types, initial(pref.vore_egg_type)) /datum/category_item/player_setup_item/vore/egg/copy_to_mob(var/mob/living/carbon/human/character) character.vore_egg_type = pref.vore_egg_type @@ -59,7 +28,7 @@ var/PINKSPOTS_EGG = "Spotted pink" return TOPIC_NOACTION else if(href_list["vore_egg_type"]) - var/list/vore_egg_types = global_vore_egg_types + var/list/vore_egg_types = tf_vore_egg_types var/selection = input(user, "Choose your character's egg type:", "Character Preference", pref.vore_egg_type) as null|anything in vore_egg_types if(selection) pref.vore_egg_type = vore_egg_types[selection] diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 9b9a5bbaa7c..48abf3db5d7 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -14,6 +14,9 @@ GLOBAL_LIST_INIT(digest_modes, list()) /datum/digest_mode/proc/process_mob(obj/belly/B, mob/living/L) return null +/datum/digest_mode/proc/handle_atoms(obj/belly/B, list/touchable_atoms) + return FALSE + /datum/digest_mode/digest id = DM_DIGEST noise_chance = 50 @@ -136,4 +139,61 @@ GLOBAL_LIST_INIT(digest_modes, list()) /datum/digest_mode/egg/process_mob(obj/belly/B, mob/living/carbon/human/H) if(!istype(H) || H.stat == DEAD || H.absorbed) return null - B.put_in_egg(H, 1)*/ \ No newline at end of file + B.put_in_egg(H, 1)*/ + +/datum/digest_mode/egg/handle_atoms(obj/belly/B, list/touchable_atoms) + var/list/egg_contents = list() + for(var/E in touchable_atoms) + if(istype(E, /obj/item/weapon/storage/vore_egg)) // Don't egg other eggs. + continue + if(isliving(E)) + var/mob/living/L = E + if(L.absorbed) + continue + egg_contents += L + if(isitem(E)) + egg_contents += E + if(egg_contents.len) + if(!B.ownegg) + if(B.owner.vore_egg_type in tf_vore_egg_types) + B.egg_type = B.owner.vore_egg_type + B.egg_path = tf_vore_egg_types[B.egg_type] + B.ownegg = new B.egg_path(B) + for(var/atom/movable/C in egg_contents) + if(isitem(C) && egg_contents.len == 1) //Only egging one item + var/obj/item/I = C + B.ownegg.w_class = I.w_class + B.ownegg.max_storage_space = B.ownegg.w_class + I.forceMove(B.ownegg) + B.ownegg.icon_scale_x = 0.2 * B.ownegg.w_class + B.ownegg.icon_scale_y = 0.2 * B.ownegg.w_class + B.ownegg.update_transform() + egg_contents -= I + B.ownegg = null + break + if(isliving(C)) + var/mob/living/M = C + B.ownegg.w_class = M.size_multiplier * 4 //Egg size and weight scaled to match occupant. + var/obj/item/weapon/holder/H = new M.holder_type(B.ownegg) + H.held_mob = M + M.forceMove(H) + H.sync(M) + B.ownegg.max_storage_space = H.w_class + B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class + B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class + B.ownegg.update_transform() + egg_contents -= M + B.ownegg = null + break + C.forceMove(B.ownegg) + if(isitem(C)) + var/obj/item/I = C + B.ownegg.w_class += I.w_class //Let's assume a regular outfit can reach total w_class of 16. + B.ownegg.calibrate_size() + B.ownegg.orient2hud() + B.ownegg.w_class = clamp(B.ownegg.w_class * 0.25, 1, 8) //A total w_class of 16 will result in a backpack sized egg. + B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class + B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class + B.ownegg.update_transform() + B.ownegg = null + return \ No newline at end of file diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 427cc1b6590..23ef02e9ac9 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -31,6 +31,14 @@ if(!length(touchable_atoms)) return + var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"] + if(!DM) + log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!") + return FALSE + if(DM.handle_atoms(src, touchable_atoms)) + updateVRPanels() + return + var/list/touchable_mobs = null var/list/hta_returns = handle_touchable_atoms(touchable_atoms) @@ -54,11 +62,6 @@ continue // don't give digesty messages to indigestible people to_chat(M, "[pick(EL)]") - var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"] - if(!DM) - log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!") - return FALSE - if(!digestion_noise_chance) digestion_noise_chance = DM.noise_chance @@ -99,62 +102,6 @@ var/digestion_noise_chance = 0 var/list/touchable_mobs = list() - if(digest_mode == DM_EGG) - var/list/egg_contents = list() - for(var/E in touchable_atoms) - if(istype(E, /obj/item/weapon/storage/vore_egg)) // Don't egg other eggs. - continue - if(isliving(E)) - var/mob/living/L = E - if(L.absorbed) - continue - egg_contents += L - if(isitem(E)) - egg_contents += E - if(egg_contents.len) - if(!ownegg) - if(owner.vore_egg_type in tf_vore_egg_types) - egg_type = owner.vore_egg_type - egg_path = tf_vore_egg_types[egg_type] - ownegg = new egg_path(src) - for(var/atom/movable/C in egg_contents) - if(isitem(C) && egg_contents.len == 1) //Only egging one item - var/obj/item/I = C - ownegg.w_class = I.w_class - ownegg.max_storage_space = ownegg.w_class - I.forceMove(ownegg) - ownegg.icon_scale_x = 0.2 * ownegg.w_class - ownegg.icon_scale_y = 0.2 * ownegg.w_class - ownegg.update_transform() - egg_contents -= I - ownegg = null - break - if(isliving(C)) - var/mob/living/M = C - ownegg.w_class = M.size_multiplier * 4 //Egg size and weight scaled to match occupant. - var/obj/item/weapon/holder/H = new M.holder_type(ownegg) - H.held_mob = M - M.forceMove(H) - ownegg.max_storage_space = H.w_class - ownegg.icon_scale_x = 0.25 * ownegg.w_class - ownegg.icon_scale_y = 0.25 * ownegg.w_class - ownegg.update_transform() - egg_contents -= M - ownegg = null - break - C.forceMove(ownegg) - if(isitem(C)) - var/obj/item/I = C - ownegg.w_class += I.w_class //Let's assume a regular outfit can reach total w_class of 20. - ownegg.calibrate_size() - ownegg.orient2hud() - ownegg.w_class = clamp(ownegg.w_class * 0.2, 1, 8) //A total w_class of 20 will result in a backpack sized egg. - ownegg.icon_scale_x = 0.2 * ownegg.w_class - ownegg.icon_scale_y = 0.2 * ownegg.w_class - ownegg.update_transform() - ownegg = null - return list("to_update" = to_update, "touchable_mobs" = touchable_mobs, "digestion_noise_chance" = digestion_noise_chance) - for(var/A in touchable_atoms) //Handle stray items if(isitem(A) && !did_an_item) From ed960e00248882526781d79084fdfd5c20c3d80b Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 29 Jan 2021 17:46:45 +0200 Subject: [PATCH 7/9] Adds slowdown to overweight eggs. --- code/modules/vore/eating/bellymodes_datum_vr.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 48abf3db5d7..c1f01db31e5 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -183,6 +183,8 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class B.ownegg.update_transform() egg_contents -= M + if(B.ownegg.w_class > 4) + B.ownegg.slowdown = B.ownegg.w_class - 4 B.ownegg = null break C.forceMove(B.ownegg) @@ -195,5 +197,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class B.ownegg.update_transform() + if(B.ownegg.w_class > 4) + B.ownegg.slowdown = B.ownegg.w_class - 4 B.ownegg = null return \ No newline at end of file From ac93d0e6cda33ee88280fbe7541c04d3af444258 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 29 Jan 2021 20:03:31 +0200 Subject: [PATCH 8/9] Fixes the setup button --- code/_helpers/global_lists_vr.dm | 31 +++++++++++++++++++ .../client/preference_setup/vore/03_egg.dm | 6 ++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 6af71afacfb..7a49e8b3875 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -107,6 +107,37 @@ var/global/list/fancy_release_sounds = list( "None" = null ) +var/global/list/global_vore_egg_types = list( + "Unathi", + "Tajara", + "Akula", + "Skrell", + "Sergal", + "Nevrean", + "Human", + "Slime", + "Egg", + "Xenochimera", + "Xenomorph", + "Chocolate", + "Boney", + "Slime glob", + "Chicken", + "Synthetic", + "Cooking error", + "Escape pod", + "Web cocoon", + "Bug cocoon", + "Rock", + "Yellow", + "Blue", + "Green", + "Orange", + "Purple", + "Red", + "Rainbow", + "Spotted pink") + var/global/list/tf_vore_egg_types = list( "Unathi" = /obj/item/weapon/storage/vore_egg/unathi, "Tajara" = /obj/item/weapon/storage/vore_egg/tajaran, diff --git a/code/modules/client/preference_setup/vore/03_egg.dm b/code/modules/client/preference_setup/vore/03_egg.dm index b01cc1c26e6..6c090478d5e 100644 --- a/code/modules/client/preference_setup/vore/03_egg.dm +++ b/code/modules/client/preference_setup/vore/03_egg.dm @@ -14,7 +14,7 @@ S["vore_egg_type"] << pref.vore_egg_type /datum/category_item/player_setup_item/vore/egg/sanitize_character() - pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, tf_vore_egg_types, initial(pref.vore_egg_type)) + pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, global_vore_egg_types, initial(pref.vore_egg_type)) /datum/category_item/player_setup_item/vore/egg/copy_to_mob(var/mob/living/carbon/human/character) character.vore_egg_type = pref.vore_egg_type @@ -28,10 +28,10 @@ return TOPIC_NOACTION else if(href_list["vore_egg_type"]) - var/list/vore_egg_types = tf_vore_egg_types + var/list/vore_egg_types = global_vore_egg_types var/selection = input(user, "Choose your character's egg type:", "Character Preference", pref.vore_egg_type) as null|anything in vore_egg_types if(selection) - pref.vore_egg_type = vore_egg_types[selection] + pref.vore_egg_type = selection return TOPIC_REFRESH else return From b435e756c9f654ecb99738f269d27a6555d038e5 Mon Sep 17 00:00:00 2001 From: Verkister Date: Mon, 1 Feb 2021 15:13:33 +0200 Subject: [PATCH 9/9] Makes bellied eggs relay their struggles onto the belly. --- .../objects/items/weapons/storage/egg_vr.dm | 23 +---------------- code/modules/vore/eating/belly_obj_vr.dm | 25 +++++++++++++++---- .../vore/eating/bellymodes_datum_vr.dm | 4 +-- code/modules/vore/resizing/holder_micro_vr.dm | 20 +++++++++++++++ 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/code/game/objects/items/weapons/storage/egg_vr.dm b/code/game/objects/items/weapons/storage/egg_vr.dm index 6eef606929a..0ea3b673e10 100644 --- a/code/game/objects/items/weapons/storage/egg_vr.dm +++ b/code/game/objects/items/weapons/storage/egg_vr.dm @@ -10,7 +10,7 @@ slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', ) - w_class = 0 + w_class = 2 max_w_class = 0 show_messages = 0 allow_quick_empty = TRUE @@ -180,24 +180,3 @@ name = "spotted pink egg" desc = "It is a cute pink egg with white spots." icon_state = "egg_pinkspots" - -/obj/item/weapon/holder/attack_hand(mob/living/user as mob) - if(istype(src.loc, /obj/item/weapon/storage/vore_egg)) //Don't scoop up the egged mob - src.pickup(user) - user.drop_from_inventory(src) - return - ..() - -/obj/item/weapon/holder/container_resist(mob/living/held) - if(istype(src.loc, /obj/item/weapon/storage/vore_egg)) - var/obj/item/weapon/storage/vore_egg/E = src.loc - if(isbelly(E.loc)) - var/confirm = alert(held, - "Are you sure you wish to hatch inside your captor?", - "Confirmation", - "Proceed", "Cancel") - if(!confirm == "Proceed") - return - E.hatch(held) - return - ..() \ No newline at end of file diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index e5d11bc42b1..0889c29933b 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -552,9 +552,10 @@ //Handle a mob struggling // Called from /mob/living/carbon/relaymove() -/obj/belly/proc/relay_resist(mob/living/R) +/obj/belly/proc/relay_resist(mob/living/R, obj/item/C) if (!(R in contents)) - return // User is not in this belly + if(!C) + return // User is not in this belly R.setClickCooldown(50) @@ -563,9 +564,13 @@ to_chat(owner, "Someone is attempting to climb out of your [lowertext(name)]!") if(do_after(R, escapetime, owner, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) - if((owner.stat || escapable) && (R.loc == src)) //Can still escape? - release_specific_contents(R) - return + if((owner.stat || escapable)) //Can still escape? + if(C) + release_specific_contents(C) + return + if(R.loc == src) + release_specific_contents(R) + return else if(R.loc != src) //Aren't even in the belly. Quietly fail. return else //Belly became inescapable or mob revived @@ -608,6 +613,13 @@ to_chat(R, "You start to climb out of \the [lowertext(name)].") to_chat(owner, "Someone is attempting to climb out of your [lowertext(name)]!") if(do_after(R, escapetime)) + if(escapable && C) + release_specific_contents(C) + to_chat(R,"Your struggles successfully cause [owner] to squeeze your container out of their \the [lowertext(name)].") + to_chat(owner,"[C] suddenly slips out of your [lowertext(name)]!") + for(var/mob/M in hearers(4, owner)) + M.show_message("[C] suddenly slips out of [owner]'s [lowertext(name)]!", 2) + return if((escapable) && (R.loc == src) && !R.absorbed) //Does the owner still have escapable enabled? release_specific_contents(R) to_chat(R,"You climb out of \the [lowertext(name)].") @@ -638,6 +650,9 @@ to_chat(R, "Your attempt to escape [lowertext(name)] has failed and your struggles only results in you sliding into [owner]'s [transferlocation]!") to_chat(owner, "Someone slid into your [transferlocation] due to their struggling inside your [lowertext(name)]!") + if(C) + transfer_contents(C, dest_belly) + return transfer_contents(R, dest_belly) return diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index c1f01db31e5..e00860cadaa 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.ownegg.update_transform() egg_contents -= I B.ownegg = null - break + return if(isliving(C)) var/mob/living/M = C B.ownegg.w_class = M.size_multiplier * 4 //Egg size and weight scaled to match occupant. @@ -186,7 +186,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) if(B.ownegg.w_class > 4) B.ownegg.slowdown = B.ownegg.w_class - 4 B.ownegg = null - break + return C.forceMove(B.ownegg) if(isitem(C)) var/obj/item/I = C diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/code/modules/vore/resizing/holder_micro_vr.dm index 4e7b63e0b98..b0bfbcc5b42 100644 --- a/code/modules/vore/resizing/holder_micro_vr.dm +++ b/code/modules/vore/resizing/holder_micro_vr.dm @@ -48,3 +48,23 @@ ..() for(var/mob/living/carbon/human/I in contents) item_state = lowertext(I.species.name) + +//Egg features. +/obj/item/weapon/holder/attack_hand(mob/living/user as mob) + if(istype(src.loc, /obj/item/weapon/storage/vore_egg)) //Don't scoop up the egged mob + src.pickup(user) + user.drop_from_inventory(src) + return + ..() + +/obj/item/weapon/holder/container_resist(mob/living/held) + if(!istype(src.loc, /obj/item/weapon/storage/vore_egg)) + ..() + else + var/obj/item/weapon/storage/vore_egg/E = src.loc + if(isbelly(E.loc)) + var/obj/belly/B = E.loc + B.relay_resist(held, E) + return + E.hatch(held) + return