diff --git a/code/__DEFINES/pool.dm b/code/__DEFINES/pool.dm
index 1bf39dcb1d..381abc2f39 100644
--- a/code/__DEFINES/pool.dm
+++ b/code/__DEFINES/pool.dm
@@ -7,6 +7,6 @@
GLOBAL_LIST_INIT(blacklisted_pool_reagents, list(
/datum/reagent/toxin/plasma, /datum/reagent/oxygen, /datum/reagent/nitrous_oxide, /datum/reagent/nitrogen, //gases
- /datum/reagent/fermi, //blanket fermichem ban sorry. this also covers mkultra, genital enlargers, etc etc.
- /datum/reagent/consumable/semen //NO.
+ /datum/reagent/fermi //blanket fermichem ban sorry. this also covers mkultra, genital enlargers, etc etc.
+ // /datum/reagent/consumable/semen //NO. //yes
))
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 25d044ebc3..f6d69bf241 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -811,7 +811,8 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("shower curtain", /obj/structure/curtain, 10, time = 10, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("duct", /obj/item/stack/ducts,1), \
new /datum/stack_recipe("laser pointer case", /obj/item/glasswork/glass_base/laserpointer_shell, 30), \
- new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2)))
+ new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2),
+ new /datum/stack_recipe("micro bricks", /obj/item/stack/sheet/micro_bricks, 1, 5, 15,)))
/obj/item/stack/sheet/plastic
name = "plastic"
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index e30ec783bf..88a3726df3 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -66,7 +66,12 @@
/obj/item/clothing/gloves,
/obj/item/holosign_creator,
/obj/item/forcefield_projector,
- /obj/item/assembly/signaler
+ /obj/item/assembly/signaler,
+ /obj/item/carpentry/handsaw,
+ /obj/item/carpentry/hammer,
+ /obj/item/carpentry/sandpaper,
+ /obj/item/carpentry/borer,
+ /obj/item/carpentry/glue
))
STR.can_hold = can_hold
diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm
index b888dc1a28..191320f029 100644
--- a/code/modules/cargo/bounty.dm
+++ b/code/modules/cargo/bounty.dm
@@ -77,7 +77,7 @@ GLOBAL_LIST_EMPTY(bounties_list)
// Returns a new bounty of random type, but does not add it to GLOB.bounties_list.
/proc/random_bounty()
- switch(rand(1, 15))
+ switch(rand(1, 16))
if(1)
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
return new subtype
@@ -123,6 +123,9 @@ GLOBAL_LIST_EMPTY(bounties_list)
if(15)
var/subtype = pick(subtypesof(/datum/bounty/item/gardencook))
return new subtype
+ if(16)
+ var/subtype = pick(subtypesof(/datum/bounty/lewd))
+ return new subtype
// Called lazily at startup to populate GLOB.bounties_list with random bounties.
/proc/setup_bounties()
@@ -140,7 +143,8 @@ GLOBAL_LIST_EMPTY(bounties_list)
/datum/bounty/item/medical = 2,
/datum/bounty/item/botany = 2,
/datum/bounty/item/silly = 1,
- /datum/bounty/item/gardencook = 1)
+ /datum/bounty/item/gardencook = 1,
+ /datum/bounty/lewd = 1)
for(var/the_type in easy_add_list_subtypes)
for(var/i in 1 to easy_add_list_subtypes[the_type])
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 47656f278b..54b4eddeec 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -838,7 +838,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Water"
if(/datum/reagent/consumable/semen)
dat += "Semen"
- if(/datum/reagent/consumable/femcum)
+ if(/datum/reagent/consumable/semen/femcum)
dat += "Femcum"
if(/datum/reagent/consumable/alienhoney)
dat += "Honey"
@@ -882,7 +882,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Water"
if(/datum/reagent/consumable/semen)
dat += "Semen"
- if(/datum/reagent/consumable/femcum)
+ if(/datum/reagent/consumable/semen/femcum)
dat += "Femcum"
if(/datum/reagent/consumable/alienhoney)
dat += "Honey"
@@ -2561,7 +2561,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("Semen")
features["balls_fluid"] = /datum/reagent/consumable/semen
if("Femcum")
- features["balls_fluid"] = /datum/reagent/consumable/femcum
+ features["balls_fluid"] = /datum/reagent/consumable/semen/femcum
if("Honey")
features["balls_fluid"] = /datum/reagent/consumable/alienhoney
@@ -2603,7 +2603,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("Semen")
features["breasts_fluid"] = /datum/reagent/consumable/semen
if("Femcum")
- features["breasts_fluid"] = /datum/reagent/consumable/femcum
+ features["breasts_fluid"] = /datum/reagent/consumable/semen/femcum
if("Honey")
features["breasts_fluid"] = /datum/reagent/consumable/alienhoney
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 55dbd17aee..752e91f3f6 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/modular_splurt/code/datums/components/crafting/recipes/recipes_misc.dm b/modular_splurt/code/datums/components/crafting/recipes/recipes_misc.dm
index e819ca7e65..0622e4b6f0 100644
--- a/modular_splurt/code/datums/components/crafting/recipes/recipes_misc.dm
+++ b/modular_splurt/code/datums/components/crafting/recipes/recipes_misc.dm
@@ -141,3 +141,43 @@
reqs = list(/obj/item/clothing/glasses/hud/blueshield = 1,
/obj/item/clothing/glasses/regular = 1)
category = CAT_CLOTHING
+
+//to do: put carpentry in it's own crafting tab
+/datum/crafting_recipe/weak_metal
+ name = "Heated Metal"
+ reqs = list(/obj/item/stack/sheet/metal = 5)
+ tools = list(TOOL_WELDER)
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISCELLANEOUS
+ result = /obj/item/processed/metal
+
+/datum/crafting_recipe/processed_wood
+ name = "Processable Wood"
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 5)
+ tools = list(TOOL_WIRECUTTER, TOOL_WELDER)
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISCELLANEOUS
+ result = /obj/item/processed/wood/plank
+
+/datum/crafting_recipe/stool_base
+ name = "Stool Base"
+ reqs = list(/obj/item/processed/wood/seat = 1, /obj/item/processed/wood/gluepeg = 4)
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISCELLANEOUS
+ result = /obj/item/processed/wood/stool1
+
+/datum/crafting_recipe/clothcushion
+ name = "Cloth Cushion"
+ reqs = list(/obj/item/stack/sheet/cloth = 2, /obj/item/stack/sheet/cotton = 5)
+ tools = list(TOOL_WIRECUTTER)
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISCELLANEOUS
+ result = /obj/item/cushion
+
+/datum/crafting_recipe/silkcushion
+ name = "Silk Cushion"
+ reqs = list(/obj/item/stack/sheet/silk = 2, /obj/item/stack/sheet/cotton = 5)
+ tools = list(TOOL_WIRECUTTER)
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISCELLANEOUS
+ result = /obj/item/cushion/silk
diff --git a/modular_splurt/code/game/object/items/stacks/sheets/sheet_types.dm b/modular_splurt/code/game/object/items/stacks/sheets/sheet_types.dm
index 2f67ea3993..7f58120e01 100644
--- a/modular_splurt/code/game/object/items/stacks/sheets/sheet_types.dm
+++ b/modular_splurt/code/game/object/items/stacks/sheets/sheet_types.dm
@@ -62,3 +62,61 @@ GLOBAL_LIST_INIT(mush_wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood/mushroom/fifty
amount = 50
+
+/obj/item/stack/sheet/silk
+ name = "silk"
+ desc = "A long soft material. This one is just made out of cotton rather then any spiders or wyrms"
+ singular_name = "silk sheet"
+ icon_state = "sheet-silk"
+ item_state = "sheet-cloth"
+ novariants = TRUE
+ merge_type = /obj/item/stack/sheet/silk
+ grind_results = list(/datum/reagent/cellulose = 2)
+
+//obj/item/stack/sheet/silk/Initialize(mapload, new_amount, merge = TRUE)
+// recipes = GLOB.silk_recipes
+// return ..()
+
+
+GLOBAL_LIST_INIT(micro_bricks_recipes, list ( \
+ new /datum/stack_recipe("Road fourway", /obj/structure/micro_brick/road_fourway, 2, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("Road threeway", /obj/structure/micro_brick/road_threeway, 2, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("Road straight", /obj/structure/micro_brick/road_straight, 2, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("Road turn", /obj/structure/micro_brick/Road_turn, 2, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new /datum/stack_recipe("Small houses", /obj/structure/micro_brick/small_house, 5, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("Small business", /obj/structure/micro_brick/small_business, 5, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("Small warehouse", /obj/structure/micro_brick/small_warehouse, 5, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ new /datum/stack_recipe("Small museum", /obj/structure/micro_brick/small_museum, 5, time = 2, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new /datum/stack_recipe("Small moon", /obj/item/moon, 5, time = 2), \
+ null, \
+ ))
+
+/obj/item/stack/sheet/micro_bricks
+ name = "Micro Bricks"
+ desc = "an studless version of the iconic bricks for recreation use on station with big crewmembers "
+ singular_name = "Micro Brick"
+ icon = 'modular_splurt/icons/obj/stack_objects.dmi'
+ icon_state = "SmallBucket"
+ item_state = "SmallBucket"
+ custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
+ flags_1 = CONDUCT_1
+ resistance_flags = FIRE_PROOF
+ merge_type = /obj/item/stack/sheet/micro_bricks
+
+/obj/item/stack/sheet/micro_bricks/fifty
+ amount = 50
+
+/obj/item/stack/sheet/micro_bricks/twenty
+ amount = 20
+
+/obj/item/stack/sheet/micro_bricks/ten
+ amount = 10
+
+/obj/item/stack/sheet/micro_bricks/five
+ amount = 5
+
+/obj/item/stack/sheet/micro_bricks/Initialize(mapload, new_amount, merge = TRUE)
+ recipes = GLOB.micro_bricks_recipes
+ return ..()
diff --git a/modular_splurt/code/game/object/structures/micro_bricks.dm b/modular_splurt/code/game/object/structures/micro_bricks.dm
new file mode 100644
index 0000000000..0c167c87bd
--- /dev/null
+++ b/modular_splurt/code/game/object/structures/micro_bricks.dm
@@ -0,0 +1,129 @@
+/obj/structure/micro_brick
+ icon = 'modular_splurt/icons/obj/small_world.dmi'
+ anchored = FALSE
+ var/buildstacktype = /obj/item/stack/sheet/micro_bricks
+
+/obj/structure/micro_brick/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE)
+
+/obj/structure/micro_brick/Initialize()
+ . = ..()
+ RegisterSignal(src, COMSIG_PARENT_ATTACKBY, .proc/on_attackby)
+ RegisterSignal(src, COMSIG_ATOM_ATTACK_HAND, .proc/handatacc)
+
+/obj/structure/micro_brick/proc/on_attackby(datum/source, obj/item/item, mob/user, params)
+ if(try_crush_microbricks(user))
+ return TRUE
+
+ if(istype(item, /obj/item/carpentry/glue))
+ to_chat(user,"You glue the bricks to the floor.")
+ anchored = TRUE
+ return TRUE
+
+ if(istype(item, /obj/item/crowbar))
+ to_chat(user,"You pry the bricks from the floor.")
+ anchored = FALSE
+ return TRUE
+
+ //probably could better, but im busy playing warframe rn to help Summer lmao -Dahl
+ // Moved it to the top, MERP! Also... i CHANGED THE CODE. Side note, AAAAAAA! -Summer
+
+/obj/structure/micro_brick/proc/handatacc(datum/source, mob/user, list/modifiers)
+ return try_crush_microbricks(user)
+
+/obj/structure/micro_brick/proc/try_crush_microbricks(mob/stomper)
+ if(stomper.a_intent != INTENT_HARM)
+ return FALSE
+ to_chat(stomper, "You crush the microbrick structure, what a monster!")
+
+ playsound(src, pick('modular_splurt/sound/effects/bricks_1.ogg', 'modular_splurt/sound/effects/bricks_2.ogg'), 30, 0)
+ //I Stepped on these legos that i bought. and it hurts :( -Summer
+ qdel(src)
+ return TRUE
+
+/obj/structure/micro_brick/road_fourway
+ name = "Road fourway"
+ desc = "roundabouts are better!"
+ icon_state = "roadfourway"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 2
+
+/obj/structure/micro_brick/road_threeway
+ name = "Road threeway"
+ desc = "Ill take the back you get the front."
+ icon_state = "roadthreeway"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 1
+
+/obj/structure/micro_brick/road_straight
+ name = "Road straight"
+ desc = "Is it gay if the balls touch?"
+ icon_state = "roadstraight"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 1
+
+/obj/structure/micro_brick/Road_turn
+ name = "Road turn"
+ desc = "Bending the Rules."
+ //i cannot find a joke for this :(
+ icon_state = "roadturn"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 1
+
+/obj/structure/micro_brick/small_house
+ name = "Small houses"
+ desc = "Lets hope this household does their taxes!"
+ icon_state = "smallhouses"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 5
+
+/obj/structure/micro_brick/small_business
+ name = "Small business"
+ desc = "A place for not many 9's with how many 5's"
+ icon_state = "smallbusiness"
+ var/rotation_flags = TRUE
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 5
+
+/obj/structure/micro_brick/small_warehouse
+ name = "Small warehouse"
+ desc = "The house has been exposed to the moon light and is now a warehouse!"
+ // https://i.redd.it/4ke5819c2ib61.jpg
+ icon_state = "warehouse"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 5
+
+/obj/structure/micro_brick/small_museum
+ name = "Small museum"
+ desc = "A place to store old and small relics found around the station "
+ icon_state = "smallmuseum"
+ resistance_flags = FLAMMABLE
+ max_integrity = 100
+ integrity_failure = 30
+ var/buildstackamount = 5
+
+/obj/item/moon
+ name = "Small moon"
+ icon_state = "smallmoon"
+ icon = 'modular_splurt/icons/obj/small_world.dmi'
+ desc = "You now have the power of the moon on your side"
+ throwforce = 0
+ throw_speed = 3
+ throw_range = 7
+ force = 0
+ total_mass = TOTAL_MASS_TINY_ITEM
diff --git a/modular_splurt/code/modules/cargo/bounties/lewd.dm b/modular_splurt/code/modules/cargo/bounties/lewd.dm
new file mode 100644
index 0000000000..e3f713388c
--- /dev/null
+++ b/modular_splurt/code/modules/cargo/bounties/lewd.dm
@@ -0,0 +1,105 @@
+
+//Jay Sparrow
+//The base for this datum is found in reagent.dm
+/datum/bounty/lewd
+ var/required_volume = 10
+ var/shipped_volume = 0
+ var/datum/reagent/wanted_reagent
+
+
+/datum/bounty/lewd/completion_string()
+ return {"[round(shipped_volume)]/[required_volume] Units"}
+
+/datum/bounty/lewd/can_claim()
+ return ..() && shipped_volume >= required_volume
+
+/datum/bounty/lewd/applies_to(obj/O)
+ if(!istype(O, /obj/item/reagent_containers))
+ return FALSE
+ if(!O.reagents || !O.reagents.has_reagent(wanted_reagent.type))
+ return FALSE
+ if(O.flags_1 & HOLOGRAM_1)
+ return FALSE
+ return shipped_volume < required_volume
+
+/datum/bounty/lewd/ship(obj/O)
+ if(!applies_to(O))
+ return
+ shipped_volume += O.reagents.get_reagent_amount(wanted_reagent.type)
+ if(shipped_volume > required_volume)
+ shipped_volume = required_volume
+
+/datum/bounty/lewd/compatible_with(other_bounty)
+ return TRUE //Not a lot of different reagents right now, so no sense in closing these off.
+
+/datum/bounty/lewd/fluid
+ name = "Discretionary Bounty"
+ reward = 1500
+
+/datum/bounty/lewd/fluid/New()
+ var/reagent_type
+ switch(rand(1, 20)) //So we can set probabilities for each kind
+ if(1,2,3,4,5)//Cum bounty
+ required_volume = 200
+ reagent_type = /datum/reagent/consumable/semen
+ wanted_reagent = new reagent_type
+ name = wanted_reagent.name
+ description = "CentCom is in need of donors for their fertility program."
+ reward += rand(2, 7) * 500
+ if(6,7) //Big cum bounty
+ required_volume = 1000
+ reagent_type = /datum/reagent/consumable/semen
+ wanted_reagent = new reagent_type
+ name = wanted_reagent.name
+ description = "Yes. We really need that much. We hear you're the best suppliers around."
+ reward += rand(10, 17) * 500
+ if(8,9,10,11,12) //Milk
+ required_volume = 200
+ reagent_type = /datum/reagent/consumable/milk
+ wanted_reagent = new reagent_type
+ name = wanted_reagent.name
+ description = "CentCom's kitchen is low on dairy, and this station always seems to have plenty for some reason. Mind sending us some?"
+ reward += rand(2, 7) * 500
+ if(13,14) //Mega Milk
+ required_volume = 1000
+ reagent_type = /datum/reagent/consumable/milk
+ wanted_reagent = new reagent_type
+ name = wanted_reagent.name
+ description = "The Kinaris annual bake sale is soon, and all of our milk has expired. Help us out."
+ reward += rand(10, 17) * 500 //Milk is generally easier to get. Make the reward a little lower.
+ if(15,16,17,18,19) //A little romance
+ var/static/list/possible_reagents = list(\
+ /datum/reagent/drug/aphrodisiac,\
+ /datum/reagent/consumable/ethanol/between_the_sheets,\
+ /datum/reagent/drug/aphrodisiacplus,\
+ /datum/reagent/lube)
+ required_volume = 30
+ reagent_type = pick(possible_reagents)
+ wanted_reagent = new reagent_type
+ name = wanted_reagent.name
+ description = "A CentCom official wants something to spice up the bedroom. We told them this was a misuse of their power. It went through anyways."
+ reward += rand(0, 5) * 500
+ if(20) //Not as popular of a fluid, so we will leave it the lowest chance.
+ required_volume = 30
+ reagent_type = /datum/reagent/consumable/semen/femcum
+ wanted_reagent = new reagent_type
+ name = wanted_reagent.name
+ description = "A CentCom official requested this for undisclosed research purposes."
+ reward += rand(2, 7) * 500
+
+/* //Just not getting this to work.
+//Freeform sales
+/datum/export/lewd/reagent_container
+ cost = 0 //Base cost of canister. We only care about what's inside.
+ unit_name = "Fluid Container"
+ export_types = list(/obj/item/reagent_containers/)
+/datum/export/lewd/reagent_containers/get_cost(obj/O)
+ var/obj/item/reagent_containers/C = O
+ var/worth = 0
+ var/fluids = C.reagents.reagent_list
+
+ worth += fluids[/datum/reagent/consumable/semen]*2
+ worth += fluids[/datum/reagent/consumable/milk]*2
+ worth += fluids[/datum/reagent/consumable/semen/femcum]*5
+ return worth
+*/
diff --git a/modular_splurt/code/modules/cargo/exports/sheets.dm b/modular_splurt/code/modules/cargo/exports/sheets.dm
new file mode 100644
index 0000000000..75db8c1aee
--- /dev/null
+++ b/modular_splurt/code/modules/cargo/exports/sheets.dm
@@ -0,0 +1,5 @@
+/datum/export/stack/silk
+ cost = 200 //The new plasma
+ unit_name = "sheets"
+ message = "of silk"
+ export_types = list(/obj/item/stack/sheet/silk)
diff --git a/modular_splurt/code/modules/cargo/exports/sweatshop.dm b/modular_splurt/code/modules/cargo/exports/sweatshop.dm
new file mode 100644
index 0000000000..c59e94461b
--- /dev/null
+++ b/modular_splurt/code/modules/cargo/exports/sweatshop.dm
@@ -0,0 +1,26 @@
+/datum/export/sweatshop/stool
+ cost = 2550 //buffed temporarily due to paper being pricier than actual wood, was 850
+ unit_name = "custom stool"
+ export_types = list(/obj/item/processed/wood/stool)
+
+/datum/export/sweatshop/cushion
+ cost = 450 //buffed temporarily due to paper being pricier than actual cotton, was 300
+ unit_name = "cloth cushion"
+ export_types = list(/obj/item/cushion)
+
+/datum/export/sweatshop/cushionsilk
+ cost = 750 //buffed temporarily due to paper being pricier than actual silk, was 500
+ unit_name = "silk cushion"
+ export_types = list(/obj/item/cushion)
+
+/datum/export/sweatshop/stool/cushioncloth
+ cost = 5400 //buffed temporarily due to paper being pricier than actual wood, was 1800
+ unit_name = "cushioned stool (cloth)"
+ export_types = list(/obj/item/processed/wood/stoolcloth)
+
+/datum/export/sweatshop/stool/cushionsilk
+ cost = 7200 //buffed temporarily due to paper being pricier than actual wood, was 2400
+ unit_name = "cushioned stool (cloth)"
+ export_types = list(/obj/item/processed/wood/stoolsilk)
+
+// Prices above are temporary buffs until more carpentry is added
diff --git a/modular_splurt/code/modules/cargo/packs/misc.dm b/modular_splurt/code/modules/cargo/packs/misc.dm
index 277818532b..b39fbf9128 100644
--- a/modular_splurt/code/modules/cargo/packs/misc.dm
+++ b/modular_splurt/code/modules/cargo/packs/misc.dm
@@ -124,3 +124,67 @@
/obj/item/gun/energy/civilian)
crate_name = "Civilian Energy Pistols"
crate_type = /obj/structure/closet/crate/secure/weapon
+
+/datum/supply_pack/misc/carpet_exotic
+ name = "Exotic Carpet Crate"
+ desc = "Exotic carpets straight from Space Russia, for all your decorating needs. Contains 100 tiles each of 10 different flooring patterns."
+ cost = 7000
+ contains = list(/obj/item/stack/tile/carpet/blue/fifty,
+ /obj/item/stack/tile/carpet/blue/fifty,
+ /obj/item/stack/tile/carpet/cyan/fifty,
+ /obj/item/stack/tile/carpet/cyan/fifty,
+ /obj/item/stack/tile/carpet/green/fifty,
+ /obj/item/stack/tile/carpet/green/fifty,
+ /obj/item/stack/tile/carpet/orange/fifty,
+ /obj/item/stack/tile/carpet/orange/fifty,
+ /obj/item/stack/tile/carpet/purple/fifty,
+ /obj/item/stack/tile/carpet/purple/fifty,
+ /obj/item/stack/tile/carpet/red/fifty,
+ /obj/item/stack/tile/carpet/red/fifty,
+ /obj/item/stack/tile/carpet/royalblue/fifty,
+ /obj/item/stack/tile/carpet/royalblue/fifty,
+ /obj/item/stack/tile/carpet/royalblack/fifty,
+ /obj/item/stack/tile/carpet/royalblack/fifty,
+ /obj/item/stack/tile/carpet/blackred/fifty,
+ /obj/item/stack/tile/carpet/blackred/fifty,
+ /obj/item/stack/tile/carpet/monochrome/fifty,
+ /obj/item/stack/tile/carpet/monochrome/fifty)
+ crate_name = "exotic carpet crate"
+
+/datum/supply_pack/misc/prospacillin //size changing should be hard to achieve; so enjoy the price tag.
+ name = "Prospacillin Bottle"
+ desc = "An extremely expensive solution of growth serum known as Prospacillin. Effects are permanent upon consumption, and growth is slow."
+ cost = 100000
+ contains = list(/obj/item/reagent_containers/food/drinks/prospacillin)
+
+/datum/supply_pack/misc/diminicillin //size changing should be hard to achieve; so enjoy the price tag.
+ name = "Diminicillin Bottle"
+ desc = "An extremely expensive solution of shrinking serum known as Diminicillin. Effects are permanent upon consumption, and shrinking is slow."
+ cost = 100000
+ contains = list(/obj/item/reagent_containers/food/drinks/diminicillin)
+
+/datum/supply_pack/misc/microbricks
+ name = "Microbricks Crate"
+ desc = "Extremely bored? Recreate a downscale city and get upset when it all comes crumbling down!"
+ cost = 1500
+ contains = list(/obj/item/stack/sheet/micro_bricks/fifty)
+ crate_name = "microbricks crate"
+
+/datum/supply_pack/misc/carpentry
+ name = "Carpentry Crate"
+ desc = "Make money at cargo by learning some carpentry and making custom furniture."
+ cost = 1000
+ contains = list(/obj/item/carpentry/handsaw,
+ /obj/item/carpentry/hammer,
+ /obj/item/carpentry/glue,
+ /obj/item/carpentry/borer,
+ /obj/item/carpentry/sandpaper)
+ crate_name = "carpentry crate"
+
+/datum/supply_pack/service/stripperpole
+ name = "Stripper Pole Crate"
+ desc = "No private bar is complete without a stripper pole, show off the goods! Comes with a ready-to-assemble stripper pole, and a complementary wrench to get things set up!"
+ cost = 3550
+ contains = list(/obj/item/polepack,
+ /obj/item/wrench)
+ crate_name = "stripper pole crate"
diff --git a/modular_splurt/code/modules/cargo/sweatshop/metal.dm b/modular_splurt/code/modules/cargo/sweatshop/metal.dm
new file mode 100644
index 0000000000..101d69a003
--- /dev/null
+++ b/modular_splurt/code/modules/cargo/sweatshop/metal.dm
@@ -0,0 +1,6 @@
+/obj/item/processed/metal
+ name = "Heated Metal"
+ desc = "A malleable metal, able to be cut into nails."
+ icon = 'modular_splurt/icons/obj/cargo/sweatshop/metal.dmi'
+ icon_state = "metal"
+ sharpness = TRUE
diff --git a/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm b/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm
new file mode 100644
index 0000000000..d8611337ab
--- /dev/null
+++ b/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm
@@ -0,0 +1,256 @@
+//THE TOOLS
+/obj/item/carpentry
+ name = "carpentry"
+ desc = "You shouldn't be seeing this!"
+ icon = 'modular_splurt/icons/obj/cargo/sweatshop/sweatshop.dmi'
+ usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
+
+/obj/item/carpentry/handsaw
+ name = "handsaw"
+ desc = "A shoddy tool used to process wood into smaller segments."
+ icon_state = "handsaw"
+ slot_flags = ITEM_SLOT_BACK
+ force = 8
+ sharpness = TRUE
+ w_class = WEIGHT_CLASS_HUGE
+ custom_materials = list(/datum/material/iron=50)
+ attack_verb = list("slashed", "sawed")
+
+/obj/item/carpentry/hammer
+ name = "hammer"
+ desc = "A tool used to manually bash nails into place."
+ icon_state = "hammer"
+ slot_flags = ITEM_SLOT_BELT
+ force = 7
+ sharpness = FALSE
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(/datum/material/iron=100)
+ attack_verb = list("bonked", "nailed")
+
+/obj/item/carpentry/glue
+ name = "glue"
+ desc = "Used to haphazardly stick things together; secured by the toughest Monkey Glue(TM)."
+ icon_state = "glue"
+ force = 0
+ sharpness = FALSE
+ w_class = WEIGHT_CLASS_SMALL
+ custom_materials = list(/datum/material/plastic=25)
+ attack_verb = list("glued", "coughed")
+
+/obj/item/carpentry/borer
+ name = "manual borer"
+ desc = "An incredibly awful tool used to manually drill holes into something... Surely there's a better option."
+ icon_state = "borer"
+ force = 3
+ sharpness = TRUE
+ w_class = WEIGHT_CLASS_SMALL
+ custom_materials = list(/datum/material/iron=25)
+ attack_verb = list("bored", "drilled")
+
+/obj/item/carpentry/sandpaper
+ name = "sandpaper strip"
+ desc = "A strip of sandpaper, commonly used for sanding down rough surfaces into a more smooth shape."
+ icon_state = "sandpaper"
+ force = 1
+ sharpness = FALSE
+ w_class = WEIGHT_CLASS_TINY
+ custom_materials = list(/datum/material/glass=1) //lmao
+ attack_verb = list("sanded", "licked")
+
+/obj/item/nails
+ name = "metal nails"
+ desc = "A bunch of nails, used for hammering into things."
+ icon = 'modular_splurt/icons/obj/cargo/sweatshop/sweatshop.dmi'
+ icon_state = "nails"
+ force = 0
+ sharpness = TRUE
+ w_class = WEIGHT_CLASS_TINY
+ custom_materials = list(/datum/material/iron=10)
+ attack_verb = list("nailed", "screwed")
+
+/obj/item/cushion
+ name = "basic cushion"
+ desc = "Beats sitting on the floor."
+ icon = 'modular_splurt/icons/obj/cargo/sweatshop/cloth.dmi'
+ icon_state = "clothcushion"
+ force = 0
+ sharpness = FALSE
+ w_class = WEIGHT_CLASS_NORMAL
+ attack_verb = list("thomped", "thwacked")
+
+/obj/item/cushion/silk
+ name = "silk cushion"
+ desc = "How'd it turn red?!"
+ icon_state = "silkcushion"
+
+//BASIC RECIPES - To do, add sound. As well as refactor everything in a more smart way so we can add the possibility of multiple wood types in the future.
+//saw a plank into two platforms
+/obj/item/processed/wood/plank/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/handsaw))
+ to_chat(user," You begin to saw [src] in half...")
+ if(do_after(user, 40) && isturf(loc))
+ new src.sawobj(loc)
+ new src.sawobj(loc) //send help i dont know how to make two in the same line lmfao
+ to_chat(user, " You saw [src] in half.")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to saw [src]!")
+ else
+ ..()
+//saw a platform into four blocks
+/obj/item/processed/wood/platform/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/handsaw))
+ to_chat(user," You begin cut [src] into smaller pieces...")
+ if(do_after(user, 20) && isturf(loc))
+ new src.sawobj(loc)
+ new src.sawobj(loc)
+ new src.sawobj(loc)
+ new src.sawobj(loc)
+ to_chat(user, " You cut [src] into four pieces.")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to saw [src]!")
+ else
+ ..()
+//sand a block into a peg
+/obj/item/processed/wood/block/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/sandpaper))
+ to_chat(user," You carefully begin to sand down [src]...")
+ if(do_after(user, 50) && isturf(loc))
+ new src.sandobj(loc)
+ to_chat(user, " You smooth [src] into a peg.")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to sand [src]!")
+ else
+ ..()
+//cut heated metal into nails
+/obj/item/processed/metal/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/wirecutters))
+ to_chat(user," You tediously begin to cut [src] into several nails...")
+ if(do_after(user, 80) && isturf(loc))
+ new /obj/item/nails(loc)
+ new /obj/item/nails(loc)
+ to_chat(user, " You make some crude metal nails.")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to process [src]!")
+ else
+ ..()
+
+//Covered in glue
+//cover a wooden block in glue
+/obj/item/processed/wood/block/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/glue))
+ to_chat(user," You begin to glue down one end of [src]...")
+ if(do_after(user, 10) && isturf(loc))
+ new src.glueobj(loc)
+ to_chat(user, " You slap some glue onto [src].")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to glue [src]!")
+ else
+ ..()
+//cover a wooden peg in glue
+/obj/item/processed/wood/peg/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/glue))
+ to_chat(user," You begin to glue down one end of the [src]...")
+ if(do_after(user, 10) && isturf(loc))
+ new src.glueobj(loc)
+ to_chat(user, " You slap some glue onto [src].")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to glue [src]!")
+ else
+ ..()
+
+//Seats
+//bore a platform into a seat
+/obj/item/processed/wood/platform/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/borer))
+ to_chat(user," You begin to cut four holes into [src]...")
+ if(do_after(user, 40) && isturf(loc))
+ new src.boreobj(loc)
+ to_chat(user, " You drill four holes into [src].")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to refine [src]!")
+ else
+ ..()
+
+//Stools - Further crafting
+/obj/item/processed/wood/stool1/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/nails))
+ to_chat(user," You place nails into [src]...")
+ if(do_after(user, 20) && isturf(loc))
+ new /obj/item/processed/wood/stool2(loc)
+ to_chat(user, " The nails are ready to be hammered.")
+ qdel(src)
+ qdel(I)
+ else
+ to_chat(user, "You need to hold still to refine [src]!")
+ else
+ ..()
+
+/obj/item/processed/wood/stool2/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/hammer))
+ to_chat(user," You begin to hammer the [src]...")
+ if(do_after(user, 30) && isturf(loc))
+ new /obj/item/processed/wood/stool3(loc)
+ to_chat(user, " The nails are hammered into place.")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to refine [src]!")
+ else
+ ..()
+
+/obj/item/processed/wood/stool3/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/carpentry/sandpaper))
+ to_chat(user," You begin to sand the [src]...")
+ if(do_after(user, 30) && isturf(loc))
+ new /obj/item/processed/wood/stool4(loc)
+ to_chat(user, " You sand down the [src].")
+ qdel(src)
+ else
+ to_chat(user, "You need to hold still to refine [src]!")
+ else
+ ..()
+
+/obj/item/processed/wood/stool4/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/processed/wood/glueblock))
+ to_chat(user," You add some finishing touches to the [src]...")
+ if(do_after(user, 30) && isturf(loc))
+ new /obj/item/processed/wood/stool(loc)
+ to_chat(user, " You complete the [src].")
+ qdel(src)
+ qdel(I)
+ else
+ to_chat(user, "You need to hold still to refine [src]!")
+ else
+ ..()
+
+/obj/item/processed/wood/stool/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/cushion))
+ to_chat(user," You secure a cloth cushion to [src]...")
+ if(do_after(user, 30) && isturf(loc))
+ new /obj/item/processed/wood/stoolcloth(loc)
+ to_chat(user, " You add a cushion to [src].")
+ qdel(src)
+ qdel(I)
+ else
+ to_chat(user, "You need to hold still to detail [src]!")
+ else
+ ..()
+
+/obj/item/processed/wood/stool/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/cushion/silk))
+ to_chat(user," You secure a silk cushion to [src]...")
+ if(do_after(user, 30) && isturf(loc))
+ new /obj/item/processed/wood/stoolsilk(loc)
+ to_chat(user, " You add a cushion to [src].")
+ qdel(src)
+ qdel(I)
+ else
+ to_chat(user, "You need to hold still to detail [src]!")
+ else
+ ..()
diff --git a/modular_splurt/code/modules/cargo/sweatshop/wooden.dm b/modular_splurt/code/modules/cargo/sweatshop/wooden.dm
new file mode 100644
index 0000000000..900441e1ce
--- /dev/null
+++ b/modular_splurt/code/modules/cargo/sweatshop/wooden.dm
@@ -0,0 +1,128 @@
+//WOODEN COMPONENTS. honestly i need to move some shit around to allow for easier material swapping, but that's for a later date.
+
+/obj/item/processed/wood
+ name = "Wooden Processed Item"
+ desc = "You shouldn't see this!"
+ icon = 'modular_splurt/icons/obj/cargo/sweatshop/wooden.dmi'
+ sharpness = FALSE
+ attack_verb = list("slapped", "thunked")
+ var/sawobj = /obj/item/genital_equipment/condom
+ var/glueobj = /obj/item/dildo
+ var/sandobj = /obj/item/carpentry/sandpaper
+ var/boreobj = /obj/item/carpentry/borer
+
+/obj/item/processed/wood/plank
+ name = "processable wooden plank"
+ desc = "A somewhat sturdy refined plank. This can be used in various applications."
+ icon_state = "plank"
+ force = 3
+ w_class = WEIGHT_CLASS_HUGE
+ sawobj = /obj/item/processed/wood/platform
+
+/obj/item/processed/wood/platform
+ name = "wood platform"
+ desc = "A somewhat sturdy cropping of a plank. This one is an alright foundation for chairs and stools."
+ icon_state = "platform"
+ force = 3
+ w_class = WEIGHT_CLASS_NORMAL
+ sawobj = /obj/item/processed/wood/block
+ boreobj = /obj/item/processed/wood/seat
+
+/obj/item/processed/wood/block
+ name = "wood block"
+ desc = "A chopped platform into a wooden block. This one can be used for sanded into pegs, or used as a base on it's own."
+ icon_state = "block"
+ force = 2
+ w_class = WEIGHT_CLASS_SMALL
+ sandobj = /obj/item/processed/wood/peg
+ glueobj = /obj/item/processed/wood/glueblock
+
+/obj/item/processed/wood/peg
+ name = "wood peg"
+ desc = "A wooden peg. Useful for fitting into holes."
+ icon_state = "peg"
+ force = 1
+ w_class = WEIGHT_CLASS_TINY
+ attack_verb = list("donked", "thunked")
+ glueobj = /obj/item/processed/wood/gluepeg
+
+//glue
+
+/obj/item/processed/wood/gluepeg
+ name = "glued wood peg"
+ desc = "A wooden peg. With a bunch of glue used for securing."
+ icon_state = "gluepeg"
+ force = 1
+ w_class = WEIGHT_CLASS_TINY
+ attack_verb = list("pegged", "thunked")
+
+/obj/item/processed/wood/glueblock
+ name = "glued wood block"
+ desc = "A wooden block. With a bunch of glue used for securing."
+ icon_state = "glueblock"
+ force = 2
+ w_class = WEIGHT_CLASS_SMALL
+ attack_verb = list("blocked", "thunked")
+
+//seat
+/obj/item/processed/wood/seat
+ name = "wood seat"
+ desc = "A baseline for crafting seats. Not exactly that comfortable to sit on..."
+ icon_state = "seat"
+ force = 2
+ w_class = WEIGHT_CLASS_SMALL
+ attack_verb = list("slapped", "thunked")
+
+
+//Stool steps. There's probably an easier way to do this, but I cannot be assed rn, I'll refine after PR
+/obj/item/processed/wood/stool1
+ name = "stool base"
+ desc = "A haphazardly made base for a stool. It's not even secured with any nails."
+ icon_state = "stool1"
+ force = 4
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/processed/wood/stool2
+ name = "nailed stool base"
+ desc = "Nails are in position"
+ icon_state = "stool2"
+ force = 4
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/processed/wood/stool3
+ name = "hammered stool base"
+ desc = "A vaguely stool-shaped... Thing. Could use some sandpaper."
+ icon_state = "stool3"
+ force = 4
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/processed/wood/stool4
+ name = "bland stool"
+ desc = "A rather bland stool."
+ icon_state = "stool4"
+ force = 4
+ w_class = WEIGHT_CLASS_BULKY
+
+//The finished product
+/obj/item/processed/wood/stool
+ name = "custom stool"
+ desc = "An intricite, custom stool."
+ icon_state = "stool"
+ force = 10
+ w_class = WEIGHT_CLASS_BULKY
+
+//Let's make it soft and more expensive
+
+/obj/item/processed/wood/stoolcloth
+ name = "cloth-cushioned stool"
+ desc = "A custom stool with a cloth cushion."
+ icon_state = "stoolcloth"
+ force = 10
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/processed/wood/stoolsilk
+ name = "cloth-cushioned stool"
+ desc = "A custom stool with a silk cushion."
+ icon_state = "stoolsilk"
+ force = 11 //lol
+ w_class = WEIGHT_CLASS_BULKY
diff --git a/modular_splurt/code/modules/events/vent_clog.dm b/modular_splurt/code/modules/events/vent_clog.dm
index b95e0b250f..856cd1658a 100644
--- a/modular_splurt/code/modules/events/vent_clog.dm
+++ b/modular_splurt/code/modules/events/vent_clog.dm
@@ -21,3 +21,49 @@
var/datum/effect_system/smoke_spread/chem/smoke = new
smoke.set_up(R, 7, get_turf(vent), TRUE) // Intentionally silent. There's a fuck ton of vents.
smoke.start()
+
+/datum/round_event_control/vent_clog/female
+ name = "Clogged Vents: Girlcum"
+ typepath = /datum/round_event/vent_clog/female
+ max_occurrences = 1
+
+/datum/round_event/vent_clog/female
+ reagentsAmount = 100
+
+/datum/round_event/vent_clog/female/announce()
+ priority_announce("The scrubbers network is experiencing a backpressure squirt. Some squirting of contents may occur.", "Atmospherics alert")
+
+/datum/round_event/vent_clog/female/start()
+ for(var/obj/machinery/atmospherics/components/unary/vent in vents)
+ if(vent && vent.loc && !vent.welded)
+ var/datum/reagents/R = new/datum/reagents(1000)
+ R.my_atom = vent
+ R.add_reagent(/datum/reagent/consumable/semen/femcum, reagentsAmount)
+
+ var/datum/effect_system/foam_spread/foam = new
+ foam.set_up(200, get_turf(vent), R)
+ foam.start()
+ CHECK_TICK
+
+/datum/round_event_control/vent_clog/male
+ name = "Clogged Vents: Semen"
+ typepath = /datum/round_event/vent_clog/male
+ max_occurrences = 1
+
+/datum/round_event/vent_clog/male
+ reagentsAmount = 100
+
+/datum/round_event/vent_clog/male/announce()
+ priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejaculation of contents may occur.", "Atmospherics alert")
+
+/datum/round_event/vent_clog/male/start()
+ for(var/obj/machinery/atmospherics/components/unary/vent in vents)
+ if(vent && vent.loc && !vent.welded)
+ var/datum/reagents/R = new/datum/reagents(1000)
+ R.my_atom = vent
+ R.add_reagent(/datum/reagent/consumable/semen, reagentsAmount)
+
+ var/datum/effect_system/foam_spread/foam = new
+ foam.set_up(200, get_turf(vent), R)
+ foam.start()
+ CHECK_TICK
diff --git a/modular_splurt/code/modules/food_and_drinks/drinks/drinks/sizeitems.dm b/modular_splurt/code/modules/food_and_drinks/drinks/drinks/sizeitems.dm
new file mode 100644
index 0000000000..7325b1911f
--- /dev/null
+++ b/modular_splurt/code/modules/food_and_drinks/drinks/drinks/sizeitems.dm
@@ -0,0 +1,15 @@
+/obj/item/reagent_containers/food/drinks/prospacillin
+ name = "Prospacillin Bottle"
+ desc = "An incredibly expensive bottle used by Kinaris command. It has golden engravings and reeks of corporate greed."
+ w_class = WEIGHT_CLASS_TINY
+ icon = 'modular_splurt/icons/obj/drinks.dmi'
+ icon_state = "prospacillin"
+ list_reagents = list(/datum/reagent/growthchem = 15)
+
+/obj/item/reagent_containers/food/drinks/diminicillin
+ name = "Diminicillin Bottle"
+ desc = "An incredibly expensive bottle used by Kinaris command. It has golden engravings and reeks of corporate greed."
+ w_class = WEIGHT_CLASS_TINY
+ icon = 'modular_splurt/icons/obj/drinks.dmi'
+ icon_state = "diminicillin"
+ list_reagents = list(/datum/reagent/shrinkchem = 15)
diff --git a/modular_splurt/code/modules/food_and_drinks/food/snacks_burgers.dm b/modular_splurt/code/modules/food_and_drinks/food/snacks_burgers.dm
new file mode 100644
index 0000000000..0ca28832f6
--- /dev/null
+++ b/modular_splurt/code/modules/food_and_drinks/food/snacks_burgers.dm
@@ -0,0 +1,8 @@
+/obj/item/reagent_containers/food/snacks/burger/cumburger
+ name = "Cumburger"
+ desc = "A sticky and salty burger."
+ icon = 'modular_splurt/icons/obj/food/burgerbread.dmi'
+ icon_state = "cumburger"
+ tastes = list("bun" = 4, "salt" = 5)
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/semen = 10, /datum/reagent/drug/anaphrodisiac = 3)
+ foodtype = GRAIN
diff --git a/modular_splurt/code/modules/food_and_drinks/food/snacks_pastry.dm b/modular_splurt/code/modules/food_and_drinks/food/snacks_pastry.dm
new file mode 100644
index 0000000000..b43cfd291e
--- /dev/null
+++ b/modular_splurt/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -0,0 +1,11 @@
+/obj/item/reagent_containers/food/snacks/donut/semen
+ name = "\"cream\" donut"
+ desc = "That cream looks a little runny..."
+ icon = 'modular_splurt/icons/obj/food/donut.dmi'
+ icon_state = "donut_cum"
+ bitesize = 10
+ bonus_reagents = list(/datum/reagent/consumable/semen = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/semen = 5)
+ filling_color = "#FFFFFF"
+ tastes = list("donut" = 1, "salt" = 3)
+ foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR
diff --git a/modular_splurt/code/modules/food_and_drinks/recipes/drink_recipes.dm b/modular_splurt/code/modules/food_and_drinks/recipes/drink_recipes.dm
index 5ab9cd106f..f3547e5671 100644
--- a/modular_splurt/code/modules/food_and_drinks/recipes/drink_recipes.dm
+++ b/modular_splurt/code/modules/food_and_drinks/recipes/drink_recipes.dm
@@ -14,3 +14,28 @@
results = list(/datum/reagent/consumable/ethanol/lean = 3)
required_reagents = list(/datum/reagent/medicine/salbutamol = 1, /datum/reagent/consumable/pwr_game = 1, /datum/reagent/consumable/sugar = 1) // Salbutamol for the cough syrup. Pwr Game for the Sprite, sugar for the candies.
mix_message = "The mixture turns a deep purple colour."
+
+/datum/chemical_reaction/wockyslush
+ name = "Wocky Slush"
+ id = /datum/reagent/consumable/wockyslush
+ results = list(/datum/reagent/consumable/wockyslush = 5)
+ required_reagents = list(/datum/reagent/toxin/fentanyl = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/lemon_lime = 1)
+ mix_message = "That thang bleedin’ P!"
+
+/datum/chemical_reaction/cum_in_a_hot_tub
+ name = "Cum in a Hot Tub"
+ id = /datum/reagent/consumable/ethanol/cum_in_a_hot_tub
+ results = list(/datum/reagent/consumable/ethanol/cum_in_a_hot_tub = 3)
+ required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/ethanol/white_russian = 1, /datum/reagent/consumable/ethanol/irish_cream = 0.1)
+
+/datum/chemical_reaction/cum_in_a_hot_tub/semen
+ name = "Cum in a Hot Tub"
+ id = /datum/reagent/consumable/ethanol/cum_in_a_hot_tub/semen
+ results = list(/datum/reagent/consumable/ethanol/cum_in_a_hot_tub/semen = 3)
+ required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/semen = 1, /datum/reagent/consumable/ethanol/irish_cream = 0.1)
+
+/datum/chemical_reaction/orange_creamsicle
+ name = "Orange Creamsical"
+ id = /datum/reagent/consumable/orange_creamsicle
+ results = list(/datum/reagent/consumable/orange_creamsicle = 4)
+ required_reagents = list(/datum/reagent/consumable/vanilla = 1, /datum/reagent/consumable/milk = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/orangejuice = 1)
diff --git a/modular_splurt/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/modular_splurt/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
new file mode 100644
index 0000000000..48c98d7845
--- /dev/null
+++ b/modular_splurt/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
@@ -0,0 +1,8 @@
+/datum/crafting_recipe/food/cumburger
+ name = "Cumburger"
+ reqs = list(
+ /datum/reagent/consumable/semen = 10,
+ /obj/item/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/burger/cumburger
+ subcategory = CAT_BURGER
diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 3c3df72d9b..acc1dfa7ad 100644
--- a/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -56,3 +56,19 @@
if(M.stat == CONSCIOUS)
M.visible_message("[M] clutches at [M.p_their()] chest as if [M.p_their()] heart stopped!") // too much lean :(
..()
+
+/datum/reagent/consumable/ethanol/cum_in_a_hot_tub
+ name = "Cum in the Hot Tub"
+ boozepwr = 80
+ color = "#D2D7D9"
+ quality = DRINK_VERYGOOD
+ taste_description = "smooth cream"
+ glass_icon_state = "cum_glass"
+ shot_glass_icon_state = "cum_shot" //I'm funny, I know
+ glass_name = "Cum in the Hot Tub"
+ glass_desc = "Doesn't really leave it to the imagination, eh?"
+
+/datum/reagent/consumable/ethanol/cum_in_a_hot_tub/semen
+ boozepwr = 65
+ taste_description = "viscous cream"
+ glass_desc = "The name is probably exactly what it is."
diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/drink_reagents.dm
new file mode 100644
index 0000000000..ec68c4a9b2
--- /dev/null
+++ b/modular_splurt/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -0,0 +1,29 @@
+//Edits of main code
+/datum/reagent/consumable/milk
+ glass_icon_state = "milkglass"
+
+//Own
+/datum/reagent/consumable/wockyslush
+ name = "Wocky Slush"
+ description = "That thang bleedin' to the-... ya know I mean?"
+ color = "#7b60c4" // rgb(123, 96, 196)
+ quality = DRINK_VERYGOOD
+ taste_description = "cold rainbows"
+ glass_icon_state = "wockyslush"
+ glass_name = "Wocky Slush"
+ glass_desc = "That thang bleedin' to the-... ya know I mean?"
+
+/datum/reagent/consumable/wockyslush/on_mob_life(mob/living/carbon/M)
+ M.emote(pick("twitch","giggle","stare"))
+ M.set_drugginess(75)
+ M.apply_status_effect(/datum/status_effect/throat_soothed)
+ ..()
+
+/datum/reagent/consumable/orange_creamsicle
+ name = "Orange Creamsicle"
+ description = "A Summer time drink that can be frozen and eaten or drunk from a glass!"
+ color = "#ffb46e" // rgb(255, 180, 110)
+ taste_description = "ice cream and orange soda"
+ glass_icon_state = "orangecreamsicle"
+ glass_desc = "A Summer time drink that can be frozen and eaten or Drinked from a glass!"
+ glass_name = "Orange Creamsicle"
diff --git a/modular_splurt/code/modules/reagents/reagent_dispenser.dm b/modular_splurt/code/modules/reagents/reagent_dispenser.dm
new file mode 100644
index 0000000000..ed0d8d65dc
--- /dev/null
+++ b/modular_splurt/code/modules/reagents/reagent_dispenser.dm
@@ -0,0 +1,11 @@
+/obj/structure/reagent_dispensers/keg/semen
+ name = "keg of semen"
+ desc = "Dear lord, where did this even come from?"
+ icon_state = "whitekeg"
+ reagent_id = /datum/reagent/consumable/semen
+
+/obj/structure/reagent_dispensers/keg/femcum
+ name = "keg of femcum"
+ desc = "... Let's just say it's a keg of squirt..."
+ icon_state = "whitekeg"
+ reagent_id = /datum/reagent/consumable/semen/femcum
diff --git a/modular_splurt/icons/obj/cargo/sweatshop/cloth.dmi b/modular_splurt/icons/obj/cargo/sweatshop/cloth.dmi
new file mode 100644
index 0000000000..bd71472c66
Binary files /dev/null and b/modular_splurt/icons/obj/cargo/sweatshop/cloth.dmi differ
diff --git a/modular_splurt/icons/obj/cargo/sweatshop/metal.dmi b/modular_splurt/icons/obj/cargo/sweatshop/metal.dmi
new file mode 100644
index 0000000000..e847d11c35
Binary files /dev/null and b/modular_splurt/icons/obj/cargo/sweatshop/metal.dmi differ
diff --git a/modular_splurt/icons/obj/cargo/sweatshop/sweatshop.dmi b/modular_splurt/icons/obj/cargo/sweatshop/sweatshop.dmi
new file mode 100644
index 0000000000..27fd5fb1a6
Binary files /dev/null and b/modular_splurt/icons/obj/cargo/sweatshop/sweatshop.dmi differ
diff --git a/modular_splurt/icons/obj/cargo/sweatshop/wooden.dmi b/modular_splurt/icons/obj/cargo/sweatshop/wooden.dmi
new file mode 100644
index 0000000000..6a190f8dec
Binary files /dev/null and b/modular_splurt/icons/obj/cargo/sweatshop/wooden.dmi differ
diff --git a/modular_splurt/icons/obj/drinks.dmi b/modular_splurt/icons/obj/drinks.dmi
new file mode 100644
index 0000000000..bc1756aa59
Binary files /dev/null and b/modular_splurt/icons/obj/drinks.dmi differ
diff --git a/modular_splurt/icons/obj/food/burgerbread.dmi b/modular_splurt/icons/obj/food/burgerbread.dmi
new file mode 100644
index 0000000000..884ffea166
Binary files /dev/null and b/modular_splurt/icons/obj/food/burgerbread.dmi differ
diff --git a/modular_splurt/icons/obj/food/donut.dmi b/modular_splurt/icons/obj/food/donut.dmi
new file mode 100644
index 0000000000..0bbf3fdd86
Binary files /dev/null and b/modular_splurt/icons/obj/food/donut.dmi differ
diff --git a/modular_splurt/icons/obj/small_world.dmi b/modular_splurt/icons/obj/small_world.dmi
new file mode 100644
index 0000000000..453383d62d
Binary files /dev/null and b/modular_splurt/icons/obj/small_world.dmi differ
diff --git a/modular_splurt/icons/obj/stack_objects.dmi b/modular_splurt/icons/obj/stack_objects.dmi
index 7eee2eab4a..97ccc91c9e 100644
Binary files a/modular_splurt/icons/obj/stack_objects.dmi and b/modular_splurt/icons/obj/stack_objects.dmi differ
diff --git a/modular_splurt/sound/effects/bricks_1.ogg b/modular_splurt/sound/effects/bricks_1.ogg
new file mode 100644
index 0000000000..4d1dc37931
Binary files /dev/null and b/modular_splurt/sound/effects/bricks_1.ogg differ
diff --git a/modular_splurt/sound/effects/bricks_2.ogg b/modular_splurt/sound/effects/bricks_2.ogg
new file mode 100644
index 0000000000..29d5541149
Binary files /dev/null and b/modular_splurt/sound/effects/bricks_2.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 7d56a20afe..27f53f468d 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4267,6 +4267,7 @@
#include "modular_splurt\code\game\object\structures\false_walls.dm"
#include "modular_splurt\code\game\object\structures\flora.dm"
#include "modular_splurt\code\game\object\structures\ghost_role_spawners.dm"
+#include "modular_splurt\code\game\object\structures\micro_bricks.dm"
#include "modular_splurt\code\game\object\structures\pole.dm"
#include "modular_splurt\code\game\object\structures\statues.dm"
#include "modular_splurt\code\game\object\structures\table_frames.dm"
@@ -4315,8 +4316,14 @@
#include "modular_splurt\code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm"
#include "modular_splurt\code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm"
#include "modular_splurt\code\modules\atmospherics\machinery\components\unary_devices\vent_scrubber.dm"
+#include "modular_splurt\code\modules\cargo\exports\sheets.dm"
+#include "modular_splurt\code\modules\cargo\exports\sweatshop.dm"
+#include "modular_splurt\code\modules\cargo\bounties\lewd.dm"
#include "modular_splurt\code\modules\cargo\exports\engineering.dm"
#include "modular_splurt\code\modules\cargo\packs\armory.dm"
+#include "modular_splurt\code\modules\cargo\sweatshop\wooden.dm"
+#include "modular_splurt\code\modules\cargo\sweatshop\sweatshop.dm"
+#include "modular_splurt\code\modules\cargo\sweatshop\metal.dm"
#include "modular_splurt\code\modules\cargo\packs\engine.dm"
#include "modular_splurt\code\modules\cargo\packs\goodies.dm"
#include "modular_splurt\code\modules\cargo\packs\misc.dm"
@@ -4358,8 +4365,12 @@
#include "modular_splurt\code\modules\discord\toggle_notify.dm"
#include "modular_splurt\code\modules\events\bruh_moment.dm"
#include "modular_splurt\code\modules\events\vent_clog.dm"
+#include "modular_splurt\code\modules\food_and_drinks\drinks\drinks\sizeitems.dm"
#include "modular_splurt\code\modules\food_and_drinks\food\snacks.dm"
+#include "modular_splurt\code\modules\food_and_drinks\food\snacks_burgers.dm"
+#include "modular_splurt\code\modules\food_and_drinks\food\snacks_pastry.dm"
#include "modular_splurt\code\modules\food_and_drinks\recipes\drink_recipes.dm"
+#include "modular_splurt\code\modules\food_and_drinks\recipes\tablecraft\recipes_burger.dm"
#include "modular_splurt\code\modules\hydroponics\grown\towercap.dm"
#include "modular_splurt\code\modules\jobs\job_types\blueshield.dm"
#include "modular_splurt\code\modules\jobs\job_types\bridgeofficer.dm"
@@ -4416,8 +4427,10 @@
#include "modular_splurt\code\modules\projectiles\guns\misc\grenade_launcher.dm"
#include "modular_splurt\code\modules\projectiles\projectile\bullets\cannonball.dm"
#include "modular_splurt\code\modules\projectiles\projectile\bullets\smg.dm"
+#include "modular_splurt\code\modules\reagents\reagent_dispenser.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\alcohol_reagents.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\cit_reagents.dm"
+#include "modular_splurt\code\modules\reagents\chemistry\reagents\drink_reagents.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\drug_reagents.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\enlargement.dm"
#include "modular_splurt\code\modules\reagents\chemistry\reagents\food_reagents.dm"