From 163dc560693d83c83b7d5b3d3d0af83cd4c7709d Mon Sep 17 00:00:00 2001 From: LunarFleet <66186750+LunarFleet@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:34:13 -0400 Subject: [PATCH 1/3] Only eggs can sustain me --- .../weapons/implants/implantreagent_ch.dm | 106 ++++++++++++++++++ .../loadout/loadout_utility_ch.dm | 15 ++- 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 code/game/objects/items/weapons/implants/implantreagent_ch.dm diff --git a/code/game/objects/items/weapons/implants/implantreagent_ch.dm b/code/game/objects/items/weapons/implants/implantreagent_ch.dm new file mode 100644 index 0000000000..7e3a6cc4d0 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implantreagent_ch.dm @@ -0,0 +1,106 @@ +/obj/item/weapon/implant/reagent_generator/egg + name = "egg laying implant" + desc = "This is an implant that allows the user to lay eggs." + generated_reagents = list("egg" = 2) + usable_volume = 500 + transfer_amount = 50 + var/verb_descriptor = list("squeezes", "pushes", "hugs") + var/self_verb_descriptor = list("squeeze", "push", "hug") + var/short_emote_descriptor = list("lays", "forces out", "pushes out") + self_emote_descriptor = list("lay", "force out", "push out") + random_emote = list("lets out an embarrassed moan", "yelps in embarrassment", "quietly groans in a mixture of discomfort and pleasure") + assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_egg + var/eggtype = /obj/item/weapon/reagent_containers/food/snacks/egg + +/obj/item/weapon/implant/reagent_generator/egg/post_implant(mob/living/carbon/source) + START_PROCESSING(SSobj, src) + to_chat(source, "You implant [source] with \the [src].") + source.verbs |= assigned_proc + return 1 + +/mob/living/carbon/human/proc/use_reagent_implant_egg() + set name = "Force Someone Adjacent To Lay An Egg, If Applicable!" + set desc = "Force someone adjacent to lay an egg by squeezing into their lower body! Whilst their reaction may vary, this is certainly going to overwhelm them for a moment!" + set category = "Local" + set src in view(1) + //do_reagent_implant(usr) + if(!isliving(usr) || !usr.checkClickCooldown()) + return + + if(usr.incapacitated() || usr.stat > CONSCIOUS) + return + + var/obj/item/weapon/implant/reagent_generator/egg/rimplant + for(var/obj/item/organ/external/E in organs) + for(var/obj/item/weapon/implant/I in E.implants) + if(istype(I, /obj/item/weapon/implant/reagent_generator)) + rimplant = I + break + rimplant.empty_message = list("Your lower belly feels smooth and empty, clearly there are no eggs left to be had!", "The reduced pressure in your lower belly tells you there are no eggs left, for now...") + rimplant.full_message = list("Your lower belly is a bit bloated, possessing a mildly bumpy texture if pressed agaisnt...", "Your lower abdomen feels really heavy, making it a bit hard to walk.") + rimplant.emote_descriptor = list("an egg right out of [src]'s lower belly!", "into [src]'s belly firmly, forcing him to lay an egg!", "[src] really tight, who promptly lays an egg!") + if(rimplant.reagents.total_volume >= rimplant.usable_volume*0.75) + to_chat(src, "[src] is very full on eggs, squeezing them now may result in a cascade!") + if (rimplant && do_after(usr,100)) + if(rimplant.reagents.total_volume <= rimplant.transfer_amount) + to_chat(src, "[pick(rimplant.empty_message)]") + return + var/egg = rimplant.eggtype + new egg(get_turf(src)) + src.SetStunned(3) + src.adjustHalLoss(5) + playsound(src,'sound/vore/insert.ogg',50,1) + var/index = rand(1,3) + + if (usr != src) + var/emote = rimplant.emote_descriptor[index] + var/verb_desc = rimplant.verb_descriptor[index] + var/self_verb_desc = rimplant.self_verb_descriptor[index] + usr.visible_message("[usr] [verb_desc] [emote]", + "You [self_verb_desc] [emote]") + else + visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", + "You [pick(rimplant.self_emote_descriptor)] an egg.") + if(prob(15)) + visible_message("[src] [pick(rimplant.random_emote)].") + rimplant.reagents.remove_any(rimplant.transfer_amount) + if(prob(80*rimplant.reagents.total_volume/rimplant.usable_volume)) + while(rimplant.reagents.total_volume >= rimplant.transfer_amount) + if(do_after(src,20)) + src.SetStunned(1) + src.adjustHalLoss(5) + playsound(src,'sound/vore/insert.ogg',50,1) + new egg(get_turf(src)) + rimplant.reagents.remove_any(rimplant.transfer_amount) + if(prob(25)) + visible_message("[src] [pick(rimplant.random_emote)].") + +/obj/item/weapon/implant/reagent_generator/egg/slow + name = "slow egg laying implant" + usable_volume = 3000 + transfer_amount = 300 + +/obj/item/weapon/implant/reagent_generator/egg/veryslow + name = "very slow egg laying implant" + usable_volume = 6000 + transfer_amount = 600 + +/obj/item/weapon/implant/reagent_generator/egg/hicap + name = "high capacity egg laying implant" // Note that the capacity does not affect the regeneration rate, rather, the transfer amount does + usable_volume = 1000 // Effectively, the transfer_amount is the cost/time of making an egg. Usable volume is simply the max number of eggs. + transfer_amount = 50 + +/obj/item/weapon/implant/reagent_generator/egg/doublehicap + name = "extreme capacity egg laying implant" + usable_volume = 2000 + transfer_amount = 50 + +/obj/item/weapon/implant/reagent_generator/egg/slowlowcap + name = "slow, low capacity egg laying implant" + usable_volume = 3000 + transfer_amount = 3000 + +/obj/item/weapon/implant/reagent_generator/egg/veryslowlowcap + name = "very slow, low capacity egg laying implant" + usable_volume = 6000 + transfer_amount = 6000 \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm b/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm index 2cfd21ee37..3a882fb49f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm @@ -2,4 +2,17 @@ /datum/gear/utility/news_ch display_name = "starcaster" path = /obj/item/device/starcaster_news - cost = 0 \ No newline at end of file + cost = 0 + +/datum/gear/utility/implant/egg + display_name = "Egg implant" + path = /obj/item/weapon/implant/reagent_generator/egg + cost = 0 + +/datum/gear/utility/implant/egg/New() + ..() + var/list/implants = list() + for(var/implant in typesof(/obj/item/weapon/implant/reagent_generator/egg)) + var/obj/item/weapon/implant/reagent_generator/egg/implant_type = implant + implants[initial(implant_type.name)] = implant_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(implants)) \ No newline at end of file From 2ecfe9c616dcbdbbab560082545044c9bce1fbbf Mon Sep 17 00:00:00 2001 From: LunarFleet <66186750+LunarFleet@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:37:36 -0400 Subject: [PATCH 2/3] God please just work --- vorestation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/vorestation.dme b/vorestation.dme index ffbc60397e..1eaa83f4d9 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1360,6 +1360,7 @@ #include "code\game\objects\items\weapons\implants\implantfreedom.dm" #include "code\game\objects\items\weapons\implants\implantlanguage.dm" #include "code\game\objects\items\weapons\implants\implantpad.dm" +#include "code\game\objects\items\weapons\implants\implantreagent_ch.dm" #include "code\game\objects\items\weapons\implants\implantreagent_vr.dm" #include "code\game\objects\items\weapons\implants\implantuplink.dm" #include "code\game\objects\items\weapons\implants\neuralbasic.dm" From bd1503a35d005295f572a4f8c0f2b18790c0e407 Mon Sep 17 00:00:00 2001 From: LunarFleet <66186750+LunarFleet@users.noreply.github.com> Date: Thu, 15 Oct 2020 23:37:26 -0400 Subject: [PATCH 3/3] Realized I could touch up the interactions a bit --- .../weapons/implants/implantreagent_ch.dm | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implantreagent_ch.dm b/code/game/objects/items/weapons/implants/implantreagent_ch.dm index 7e3a6cc4d0..b882dd6597 100644 --- a/code/game/objects/items/weapons/implants/implantreagent_ch.dm +++ b/code/game/objects/items/weapons/implants/implantreagent_ch.dm @@ -36,19 +36,26 @@ if(istype(I, /obj/item/weapon/implant/reagent_generator)) rimplant = I break + rimplant.empty_message = list("Your lower belly feels smooth and empty, clearly there are no eggs left to be had!", "The reduced pressure in your lower belly tells you there are no eggs left, for now...") - rimplant.full_message = list("Your lower belly is a bit bloated, possessing a mildly bumpy texture if pressed agaisnt...", "Your lower abdomen feels really heavy, making it a bit hard to walk.") - rimplant.emote_descriptor = list("an egg right out of [src]'s lower belly!", "into [src]'s belly firmly, forcing him to lay an egg!", "[src] really tight, who promptly lays an egg!") + rimplant.full_message = list("Your lower belly is a bit bloated, possessing a mildly bumpy texture if pressed against...", "Your lower abdomen feels really heavy, making it a bit hard to walk.") + rimplant.emote_descriptor = list("an egg right out of [src]'s lower belly!", "into [src]'s belly firmly, forcing them to lay an egg!", "[src] really tight, who promptly lays an egg!") + if(rimplant.reagents.total_volume >= rimplant.usable_volume*0.75) - to_chat(src, "[src] is very full on eggs, squeezing them now may result in a cascade!") - if (rimplant && do_after(usr,100)) - if(rimplant.reagents.total_volume <= rimplant.transfer_amount) - to_chat(src, "[pick(rimplant.empty_message)]") - return + if(usr != src) + to_chat(usr, "[src] is very full on eggs, squeezing them now may result in a cascade!") + to_chat(src, "[pick(rimplant.full_message)]") + + if(rimplant.reagents.total_volume <= rimplant.transfer_amount) + if(usr != src) + to_chat(usr, "It seems that [src] is out of eggs!") + to_chat(src, "[pick(rimplant.empty_message)]") + return + visible_message("[usr] starts squeezing [src]'s lower body firmly...") + if (rimplant && do_after(usr,60)) var/egg = rimplant.eggtype new egg(get_turf(src)) src.SetStunned(3) - src.adjustHalLoss(5) playsound(src,'sound/vore/insert.ogg',50,1) var/index = rand(1,3) @@ -56,20 +63,23 @@ var/emote = rimplant.emote_descriptor[index] var/verb_desc = rimplant.verb_descriptor[index] var/self_verb_desc = rimplant.self_verb_descriptor[index] - usr.visible_message("[usr] [verb_desc] [emote]", + visible_message("[usr] [verb_desc] [emote]", "You [self_verb_desc] [emote]") else visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", "You [pick(rimplant.self_emote_descriptor)] an egg.") + if(prob(15)) visible_message("[src] [pick(rimplant.random_emote)].") rimplant.reagents.remove_any(rimplant.transfer_amount) - if(prob(80*rimplant.reagents.total_volume/rimplant.usable_volume)) + + if(prob(70*rimplant.reagents.total_volume/rimplant.usable_volume)) + to_chat(src, "You feel your legs quake as your muscles fail to stand strong!") while(rimplant.reagents.total_volume >= rimplant.transfer_amount) - if(do_after(src,20)) - src.SetStunned(1) - src.adjustHalLoss(5) + if(do_after(src,30)) + src.SetStunned(5) playsound(src,'sound/vore/insert.ogg',50,1) + src.apply_effect(10,STUTTER,0) new egg(get_turf(src)) rimplant.reagents.remove_any(rimplant.transfer_amount) if(prob(25))