diff --git a/code/game/objects/items/weapons/implants/implantreagent_ch.dm b/code/game/objects/items/weapons/implants/implantreagent_ch.dm
index b882dd6597..cb41899841 100644
--- a/code/game/objects/items/weapons/implants/implantreagent_ch.dm
+++ b/code/game/objects/items/weapons/implants/implantreagent_ch.dm
@@ -1,9 +1,9 @@
/obj/item/weapon/implant/reagent_generator/egg
- name = "egg laying implant"
+ name = "regular 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
+ usable_volume = 1500
+ transfer_amount = 300
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")
@@ -11,11 +11,13 @@
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
+ var/cascade
/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
+ source.verbs |= /mob/living/carbon/human/proc/toggle_cascade
return 1
/mob/living/carbon/human/proc/use_reagent_implant_egg()
@@ -51,59 +53,82 @@
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)
- playsound(src,'sound/vore/insert.ogg',50,1)
- var/index = rand(1,3)
+ visible_message("[usr] starts squeezing [src]'s lower body firmly...")
+ if (rimplant && do_after(usr,120,src))
+ if(src.Adjacent(usr))
+ var/egg = rimplant.eggtype
+ new egg(get_turf(src))
+ src.SetStunned(3)
+ 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]
- visible_message("[usr] [verb_desc] [emote]",
- "You [self_verb_desc] [emote]")
+ 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]
+ 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(rimplant.cascade)
+ 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,30))
+ src.SetStunned(3)
+ 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))
+ visible_message("[src] [pick(rimplant.random_emote)].")
else
- visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.",
- "You [pick(rimplant.self_emote_descriptor)] an egg.")
+ return
+/mob/living/carbon/human/proc/toggle_cascade()
- if(prob(15))
- visible_message("[src] [pick(rimplant.random_emote)].")
- rimplant.reagents.remove_any(rimplant.transfer_amount)
+ set name = "Toggle cascading"
+ set desc = "Toggle whether or not being forced to lay an egg will cause you to lay all others as well, in rapid succession"
+ set category = "Local"
+
+ 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
+
+ if(rimplant.cascade)
+ rimplant.cascade = 0
+ to_chat(src, "You toggle cascading off")
+ else
+ rimplant.cascade = 1
+ to_chat(src, "You toggle cascading on")
- 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,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))
- 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
+ transfer_amount = 600
/obj/item/weapon/implant/reagent_generator/egg/veryslow
name = "very slow egg laying implant"
usable_volume = 6000
- transfer_amount = 600
+ transfer_amount = 1200
/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
+ usable_volume = 3000 // Effectively, the transfer_amount is the cost/time of making an egg. Usable volume is simply the max number of eggs.
+ transfer_amount = 300
/obj/item/weapon/implant/reagent_generator/egg/doublehicap
name = "extreme capacity egg laying implant"
- usable_volume = 2000
- transfer_amount = 50
+ usable_volume = 6000
+ transfer_amount = 300
/obj/item/weapon/implant/reagent_generator/egg/slowlowcap
name = "slow, low capacity egg laying implant"