diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 103dabdeec..52802fa3df 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -412,7 +412,7 @@
STR.max_combined_w_class = 200
STR.max_items = 25
STR.insert_preposition = "in"
- STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart))
+ STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/cube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart))
STR.cant_hold = typecacheof(list(/obj/item/organ/brain, /obj/item/organ/liver/cybernetic, /obj/item/organ/heart/cybernetic, /obj/item/organ/lungs/cybernetic, /obj/item/organ/tongue/cybernetic, /obj/item/organ/ears/cybernetic, /obj/item/organ/eyes/robotic, /obj/item/organ/cyberimp))
/obj/item/storage/bag/bio/holding
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 515c39ffcb..d8e507050b 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -454,11 +454,11 @@
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 7
- STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/monkeycube))
+ STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/cube/monkey))
/obj/item/storage/box/monkeycubes/PopulateContents()
for(var/i in 1 to 5)
- new /obj/item/reagent_containers/food/snacks/monkeycube(src)
+ new /obj/item/reagent_containers/food/snacks/cube/monkey(src)
/obj/item/storage/box/ids
name = "box of spare IDs"
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index 97b7636f58..22cb518926 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -205,7 +205,7 @@
desc = "Need some meat? With this do-it-yourself kit you'll be swimming in it! Contains a monkey cube, an IV drip, and some cryoxadone!"
cost = 2150
contraband = TRUE
- contains = list(/obj/item/reagent_containers/food/snacks/monkeycube,
+ contains = list(/obj/item/reagent_containers/food/snacks/cube/monkey,
/obj/item/restraints/handcuffs/cable,
/obj/machinery/iv_drip,
/obj/item/reagent_containers/glass/beaker/cryoxadone,
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index 7e831b6cd6..b802aea31a 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -222,36 +222,6 @@
tastes = list("meat" = 1, "onions" = 1, "garlic" = 1)
foodtype = MEAT
-/obj/item/reagent_containers/food/snacks/monkeycube
- name = "monkey cube"
- desc = "Just add water!"
- icon_state = "monkeycube"
- bitesize = 12
- list_reagents = list(/datum/reagent/consumable/nutriment = 2)
- filling_color = "#CD853F"
- tastes = list("the jungle" = 1, "bananas" = 1)
- foodtype = MEAT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/monkeycube/On_Consume(mob/living/carbon/M)
- if(iscarbon(M))
- M.visible_message("[src] bursts out of [M]!")
- M.emote("scream")
- M.DefaultCombatKnockdown(40)
- M.adjustBruteLoss(60)
- Expand()
- return TRUE
- return ..()
-
-/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand()
- var/mob/spammer = get_mob_by_key(fingerprintslast)
- var/mob/living/carbon/monkey/bananas = new(drop_location(), TRUE, spammer)
- if (!QDELETED(bananas))
- visible_message("[src] expands!")
- bananas.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK)
- else if (!spammer) // Visible message in case there are no fingerprints
- visible_message("[src] fails to expand!")
- qdel(src)
-
/obj/item/reagent_containers/food/snacks/enchiladas
name = "enchiladas"
desc = "Viva La Mexico!"
@@ -372,3 +342,69 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
tastes = list("meat" = 3, "smokey sauce" = 1)
foodtype = MEAT
+
+////////////// Cubes //////////
+
+/obj/item/reagent_containers/food/snacks/cube
+ name = "debug cube"
+ desc = "Just add water!"
+ icon_state = "monkeycube"
+ bitesize = 12
+ list_reagents = list(/datum/reagent/consumable/nutriment = 2)
+ filling_color = "#CD853F"
+ tastes = list("broken" = 1, "code" = 1)
+ foodtype = MEAT | SUGAR
+ var/dried_being = /mob/living/carbon/monkey //What the cube will spawn mob wise
+
+/obj/item/reagent_containers/food/snacks/cube/On_Consume(mob/living/carbon/M)
+ if(iscarbon(M))
+ M.visible_message("[src] bursts out of [M]!")
+ M.emote("scream")
+ M.DefaultCombatKnockdown(40)
+ M.adjustBruteLoss(60)
+ Expand()
+ return TRUE
+ return ..()
+
+/obj/item/reagent_containers/food/snacks/cube/proc/Expand()
+ var/mob/spammer = get_mob_by_key(fingerprintslast)
+ var/mob/living/water = new dried_being(drop_location(), TRUE, spammer)
+ if (!QDELETED(water))
+ visible_message("[src] expands!")
+ water.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK)
+ else if (!spammer) // Visible message in case there are no fingerprints
+ visible_message("[src] fails to expand!")
+ qdel(src)
+
+/obj/item/reagent_containers/food/snacks/cube/monkey
+ name = "monkey cube"
+ desc = "Just add water!"
+ tastes = list("the jungle" = 1, "bananas" = 1)
+ dried_being = /mob/living/carbon/monkey
+
+/obj/item/reagent_containers/food/snacks/cube/beno
+ name = "alien cube"
+ desc = "Just add water and run!"
+ tastes = list("the jungle" = 1, "acid" = 1)
+ dried_being = /mob/living/carbon/alien
+
+/obj/item/reagent_containers/food/snacks/cube/goat
+ name = "goat cube"
+ tastes = list("grass" = 1)
+ dried_being = /mob/living/simple_animal/hostile/retaliate/goat
+
+/obj/item/reagent_containers/food/snacks/cube/cow
+ name = "cow cube"
+ tastes = list("milk" = 1, "beef" = 1)
+ dried_being = /mob/living/simple_animal/cow
+
+/obj/item/reagent_containers/food/snacks/cube/egg //Well eggs normally are able to hatch into small birds, this one does not. \
+Also in order to have a normal egg hatch you need a hen ontop of it for it to hatch, meaning this one is for on-demand hen needs.
+ name = "egg cube thing"
+ desc = "Just add water, hey wait a second..."
+ icon_state = "egg"
+ filling_color = "#F0E68C"
+ cooked_type = /obj/item/reagent_containers/food/snacks/boiledegg
+ list_reagents = list(/datum/reagent/consumable/eggyolk = 5)
+ tastes = list("dried eggs" = 1, "confusion" = 1)
+ dried_being = /mob/living/simple_animal/chicken
diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index 3d7341308b..2318c54508 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -78,7 +78,7 @@
playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1)
grinded -= required_grind
for(var/i = 0, i < cube_production, i++)
- new /obj/item/reagent_containers/food/snacks/monkeycube(src.loc)
+ new /obj/item/reagent_containers/food/snacks/cube/monkey(src.loc)
to_chat(user, "The machine's display flashes that it has [grinded] monkeys worth of material left.")
else
to_chat(user, "The machine needs at least [required_grind] monkey(s) worth of material to produce a monkey cube. It only has [grinded].")
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
index 90036c0e2a..f25aaab6fd 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
@@ -68,7 +68,7 @@
/datum/reagent/consumable/sodiumchloride = 1,
/datum/reagent/consumable/blackpepper = 1,
/obj/item/reagent_containers/glass/bowl = 1,
- /obj/item/reagent_containers/food/snacks/monkeycube = 1,
+ /obj/item/reagent_containers/food/snacks/cube/monkey = 1,
/obj/item/reagent_containers/food/snacks/grown/banana = 1
)
result = /obj/item/reagent_containers/food/snacks/soup/monkeysdelight
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 0182dec254..bcb196a103 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -194,7 +194,7 @@
prize_list += list(
new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250),
new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250),
- new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300),
+ new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/cube/monkey, 300),
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350),
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index e66ebc5f20..0206b571cb 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -271,9 +271,9 @@
/datum/reagent/water/reaction_obj(obj/O, reac_volume)
O.extinguish()
O.acid_level = 0
- // Monkey cube
- if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
- var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O
+ // cubes
+ if(istype(O, /obj/item/reagent_containers/food/snacks/cube))
+ var/obj/item/reagent_containers/food/snacks/cube/cube = O
cube.Expand()
// Dehydrated carp
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index eb473950d5..ead47e2a42 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -42,7 +42,7 @@
/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder)
for(var/i in 1 to 3)
- new /obj/item/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom))
+ new /obj/item/reagent_containers/food/snacks/cube/monkey(get_turf(holder.my_atom))
..()
//Green
diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm
index e82dffbe07..c2bf817ddf 100644
--- a/code/modules/research/designs/biogenerator_designs.dm
+++ b/code/modules/research/designs/biogenerator_designs.dm
@@ -72,7 +72,7 @@
id = "mcube"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 250)
- build_path = /obj/item/reagent_containers/food/snacks/monkeycube
+ build_path = /obj/item/reagent_containers/food/snacks/cube/monkey
category = list("initial", "Food")
/datum/design/smeat
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 95d6c49529..fd4e508e1b 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -624,9 +624,9 @@ datum/status_effect/stabilized/blue/on_remove()
O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
O.acid_level = 0
// Monkey cube
- if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
+ if(istype(O, /obj/item/reagent_containers/food/snacks/cube))
to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!")
- var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O
+ var/obj/item/reagent_containers/food/snacks/cube/cube = O
cube.Expand()
// Dehydrated carp
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index bec2c2c1ae..ac9d2e58c5 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -53,7 +53,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/grey
colour = "grey"
- itempath = /obj/item/reagent_containers/food/snacks/monkeycube
+ itempath = /obj/item/reagent_containers/food/snacks/cube/monkey
itemamount = 5
/obj/item/slimecross/industrial/orange
diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
index 2f6ca9555a..3662f45355 100644
--- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm
+++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
@@ -19,14 +19,14 @@ Reproductive extracts:
return
if(istype(O, /obj/item/storage/bag/bio))
var/list/inserted = list()
- SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted)
+ SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/cube/monkey, src, 1, null, null, user, inserted)
if(inserted.len)
- var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1]
+ var/obj/item/reagent_containers/food/snacks/cube/monkey/M = inserted[1]
if(istype(M))
eat_cube(M, user)
else
to_chat(user, "There are no monkey cubes in the bio bag!")
- if(istype(O,/obj/item/reagent_containers/food/snacks/monkeycube))
+ if(istype(O,/obj/item/reagent_containers/food/snacks/cube/monkey))
eat_cube(O, user)
if(cubes_eaten >= 3)
var/cores = rand(1,4)
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 5492e9bc38..ef9c751d57 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -146,7 +146,7 @@
else
to_chat(user, "[src] already has the contents of [O] installed!")
return
- if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
+ if(istype(O, /obj/item/reagent_containers/food/snacks/cube/monkey) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
monkeys++
to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.")
qdel(O)
@@ -155,7 +155,7 @@
var/obj/item/storage/P = O
var/loaded = FALSE
for(var/obj/G in P.contents)
- if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube))
+ if(istype(G, /obj/item/reagent_containers/food/snacks/cube/monkey))
loaded = TRUE
monkeys++
qdel(G)
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index a346cd697f..c5655026c3 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -83,7 +83,7 @@
/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
switch(activation_type)
if(SLIME_ACTIVATE_MINOR)
- var/obj/item/reagent_containers/food/snacks/monkeycube/M = new
+ var/obj/item/reagent_containers/food/snacks/cube/monkey/M = new
if(!user.put_in_active_hand(M))
M.forceMove(user.drop_location())
playsound(user, 'sound/effects/splat.ogg', 50, 1)
diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm
index 8f257d07ec..da8baa7e1c 100644
--- a/code/modules/vending/drinnerware.dm
+++ b/code/modules/vending/drinnerware.dm
@@ -20,7 +20,7 @@
/obj/item/reagent_containers/food/condiment/saltshaker = 5,
/obj/item/reagent_containers/food/condiment/peppermill = 5)
contraband = list(
- /obj/item/reagent_containers/food/snacks/monkeycube = 1,
+ /obj/item/reagent_containers/food/snacks/cube/monkey= 1,
/obj/item/kitchen/knife/butcher = 2,
/obj/item/reagent_containers/syringe = 3)
premium = list(