diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index c6be8318fd..0b46f21a97 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -73,6 +73,7 @@
#define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod"
#define ADMIN_PUNISHMENT_MAZING "Puzzle"
#define ADMIN_PUNISHMENT_PIE "Cream Pie"
+#define ADMIN_PUNISHMENT_CUSTOM_PIE "Custom Cream Pie"
#define AHELP_ACTIVE 1
#define AHELP_CLOSED 2
diff --git a/code/__HELPERS/reagents.dm b/code/__HELPERS/reagents.dm
index f1208abdd3..50c866b30b 100644
--- a/code/__HELPERS/reagents.dm
+++ b/code/__HELPERS/reagents.dm
@@ -72,3 +72,26 @@
if(!GLOB.chemical_reactions_list[primary_reagent])
GLOB.chemical_reactions_list[primary_reagent] = list()
GLOB.chemical_reactions_list[primary_reagent] += R
+
+/proc/choose_reagent_id(mob/user)
+ var/chosen_id
+ switch(alert(user, "Choose a method.", "Add Reagents", "Search", "Choose from a list", "I'm feeling lucky"))
+ if("Search")
+ var/valid_id
+ while(!valid_id)
+ chosen_id = input(user, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text
+ if(isnull(chosen_id)) //Get me out of here!
+ break
+ if(!ispath(text2path(chosen_id)))
+ chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent)))
+ if(ispath(chosen_id))
+ valid_id = TRUE
+ else
+ valid_id = TRUE
+ if(!valid_id)
+ to_chat(user, "A reagent with that ID doesn't exist!")
+ if("Choose from a list")
+ chosen_id = input(user, "Choose a reagent to add.", "Choose a reagent.") as null|anything in subtypesof(/datum/reagent)
+ if("I'm feeling lucky")
+ chosen_id = pick(subtypesof(/datum/reagent))
+ return chosen_id
\ No newline at end of file
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index e387acbd0b..b7ec8f38dc 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -945,26 +945,7 @@
A.create_reagents(amount)
if(A.reagents)
- var/chosen_id
- switch(alert(usr, "Choose a method.", "Add Reagents", "Search", "Choose from a list", "I'm feeling lucky"))
- if("Search")
- var/valid_id
- while(!valid_id)
- chosen_id = input(usr, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text
- if(isnull(chosen_id)) //Get me out of here!
- break
- if(!ispath(text2path(chosen_id)))
- chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent)))
- if(ispath(chosen_id))
- valid_id = TRUE
- else
- valid_id = TRUE
- if(!valid_id)
- to_chat(usr, "A reagent with that ID doesn't exist!")
- if("Choose from a list")
- chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in subtypesof(/datum/reagent)
- if("I'm feeling lucky")
- chosen_id = pick(subtypesof(/datum/reagent))
+ var/chosen_id = choose_reagent_id(usr)
if(chosen_id)
var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", A.reagents.maximum_volume) as num
if(amount)
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index f30e47c68e..37c79b1123 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1249,7 +1249,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
return
- var/list/punishment_list = list(ADMIN_PUNISHMENT_PIE, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_SUPPLYPOD_QUICK, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD)
+ var/list/punishment_list = list(ADMIN_PUNISHMENT_PIE, ADMIN_PUNISHMENT_CUSTOM_PIE, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_SUPPLYPOD_QUICK, ADMIN_PUNISHMENT_SUPPLYPOD, ADMIN_PUNISHMENT_MAZING, ADMIN_PUNISHMENT_ROD)
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
@@ -1314,6 +1314,19 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(ADMIN_PUNISHMENT_PIE)
var/obj/item/reagent_containers/food/snacks/pie/cream/nostun/creamy = new(get_turf(target))
creamy.splat(target)
+ if (ADMIN_PUNISHMENT_CUSTOM_PIE)
+ var/obj/item/reagent_containers/food/snacks/pie/cream/nostun/A = new(get_turf(target))
+ if(!A.reagents)
+ var/amount = input(usr, "Specify the reagent size of [A]", "Set Reagent Size", 50) as num
+ if(amount)
+ A.create_reagents(amount)
+ if(A.reagents)
+ var/chosen_id = choose_reagent_id(usr)
+ if(chosen_id)
+ var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", A.reagents.maximum_volume) as num
+ if(amount)
+ A.reagents.add_reagent(chosen_id, amount)
+ A.splat(target)
punish_log(target, punishment)