diff --git a/code/modules/cooking/recipes/cutting_board_recipes.dm b/code/modules/cooking/recipes/cutting_board_recipes.dm index c957cad7379..294825e03b1 100644 --- a/code/modules/cooking/recipes/cutting_board_recipes.dm +++ b/code/modules/cooking/recipes/cutting_board_recipes.dm @@ -414,6 +414,72 @@ PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), ) +/datum/cooking/recipe/glass_sandwich + container_type = /obj/item/reagent_containers/cooking/board + product_type = /obj/item/food/glass_sandwich + catalog_category = COOKBOOK_CATEGORY_BURGS + steps = list( + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + PCWJ_ADD_ITEM(/obj/item/shard, exact = TRUE), + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + ) + +/datum/cooking/recipe/plasma_glass_sandwich + container_type = /obj/item/reagent_containers/cooking/board + product_type = /obj/item/food/glass_sandwich/plasma + catalog_category = COOKBOOK_CATEGORY_BURGS + steps = list( + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + PCWJ_ADD_ITEM(/obj/item/shard/plasma), + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + ) + +/datum/cooking/recipe/plastitanium_glass_sandwich + container_type = /obj/item/reagent_containers/cooking/board + product_type = /obj/item/food/glass_sandwich/plasma/plastitanium + catalog_category = COOKBOOK_CATEGORY_BURGS + steps = list( + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + PCWJ_ADD_ITEM(/obj/item/shard/plastitanium), + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + ) + +/// A step that allows either direct adding of a supermatter sliver +/// (if you have somehow manage to hold one), or +/// from tongs if those are used and contain a sliver in them. +/datum/cooking/recipe_step/add_item/supermatter_sliver + +/datum/cooking/recipe_step/add_item/supermatter_sliver/check_conditions_met(obj/added_item, datum/cooking/recipe_tracker/tracker) + var/obj/item/retractor/supermatter/tongs = added_item + if(istype(tongs) && tongs.sliver) + return PCWJ_CHECK_VALID + + var/obj/item/nuke_core/supermatter_sliver/sliver = added_item + if(istype(sliver)) + return PCWJ_CHECK_VALID + + return PCWJ_CHECK_INVALID + +/datum/cooking/recipe_step/add_item/supermatter_sliver/follow_step(obj/used_item, datum/cooking/recipe_tracker/tracker, mob/user) + var/obj/item/retractor/supermatter/tongs = used_item + if(istype(tongs) && tongs.sliver) + . = ..(tongs.sliver, tracker, user) + // TODO: refactor the tongs so they actually check if(sliver) in `update_icon()` instead of manually setting the icons everywhere. + tongs.sliver = null + tongs.update_appearance(UPDATE_ICON_STATE) + else + . = ..() + +/datum/cooking/recipe/supermatter_sandwich + container_type = /obj/item/reagent_containers/cooking/board + product_type = /obj/item/food/supermatter_sandwich + catalog_category = COOKBOOK_CATEGORY_BURGS + steps = list( + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + new /datum/cooking/recipe_step/add_item/supermatter_sliver(), + PCWJ_ADD_ITEM(/obj/item/food/sliced/bread), + ) + /datum/cooking/recipe/philly_cheesesteak container_type = /obj/item/reagent_containers/cooking/board product_type = /obj/item/food/philly_cheesesteak diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index cd5760bf036..ac1e52f61d6 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -457,3 +457,59 @@ list_reagents = list("nutriment" = 5, "protein" = 2) tastes = list("peanutbutter" = 3, "banana" = 3, "bread" = 2) goal_difficulty = FOOD_GOAL_NORMAL + +/obj/item/food/glass_sandwich + name = "glass sandwich" + desc = "Crushed glass shards sandwiched between two slices of plain bread. Crunchy!" + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "glass_sandwich" + tastes = list("dozens of glass shards skewering your mouth" = 3, "pain" = 3, "bread" = 2) + list_reagents = list("nutriment" = 2, "glass_shards" = 5) + var/bite_damage = 2 + +/obj/item/food/glass_sandwich/On_Consume(mob/living/M) + ..() + M.adjustBruteLoss(bite_damage) + +/obj/item/food/glass_sandwich/plasma + name = "plasma glass sandwich" + desc = "Razor-sharp plasma glass shards, crushed up and sandwiched between two slices of plain bread. Extra crunchy!" + icon_state = "plasma_glass_sandwich" + list_reagents = list("nutriment" = 2, "glass_shards" = 5, "plasma" = 5) + bite_damage = 4 + +/obj/item/food/glass_sandwich/plasma/plastitanium + name = "plastitanium glass sandwich" + desc = "Evil-looking plastitanium glass shards, crushed up and sandwiched between two slices of plain bread. Evilly crunchy!" + icon_state = "plastitanium_glass_sandwich" + +/obj/item/food/supermatter_sandwich + name = "supermatter sandwich" + desc = "A supermatter sliver, somehow safely contained between two slices of bread. You have been told many times to not lick the forbidden nacho... But surely one taste can't be that bad?" + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "supermatter_sandwich" + tastes = list("indescribable power" = 3, "bread" = 2) + list_reagents = list("vitamin" = 50) // Supermatter is full of energy! + +/obj/item/food/supermatter_sandwich/On_Consume(mob/living/M) + ..() + if(!HAS_TRAIT(M, TRAIT_SUPERMATTER_IMMUNE)) + M.visible_message( + "[M] lifts [src] up to [M.p_their()] mouth and bites down, inducing a resonance... [M.p_their(TRUE)] body starts to glow and burst into flames before flashing into dust!", + "You bite down on [src].

Everything starts burning and all you can hear is ringing. Your final thought is: \"OH FU-\"
", + "A deafening resonance fills the air, followed by silence..." + ) + radiation_pulse(src, 2000, GAMMA_RAD) + playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) + M.drop_item() // How many bridge hobos will take a bite, I wonder? + M.dust() + message_admins("[src] has consumed [key_name_admin(M)] [ADMIN_JMP(src)].") + investigate_log("has consumed [key_name(M)].", INVESTIGATE_SUPERMATTER) + +/obj/item/food/supermatter_sandwich/process() + . = ..() + var/new_filter = isnull(get_filter("ray")) + ray_filter_helper(1, 40,"#ffd04f", 6, 20) + if(new_filter) + animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1) + animate(offset = 0, time = 10 SECONDS) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index d7e0abf3e09..3a588afc7fe 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -1329,3 +1329,27 @@ /datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=REAGENT_TOUCH, reac_volume) L.ForceContractDisease(new /datum/disease/transformation/morph()) + +/datum/reagent/glass_shards + name = "Glass shards" + id = "glass_shards" + description = "Glass, crushed into a coarse powder made up of razor-sharp shards." + color = "#87c6dac8" + taste_description = "Broken glass!" + +/datum/reagent/glass_shards/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.adjustBruteLoss(2, FALSE) + if(iscarbon(M) && prob(5)) // OH GOD IT'S CUTTING UP INSIDE ME AAAAAAAGHHHH! + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affected = H.get_organ(BODY_ZONE_CHEST) + if(affected.status & !ORGAN_INT_BLEEDING) + affected.cause_internal_bleeding() + + return ..() | update_flags + +/datum/reagent/glass_shards/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) + if(iscarbon(M)) + to_chat(M, "OH GOD IT HURTS!") + M.emote("scream") + M.adjustBruteLoss(4) diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi index 684f20a5ccc..e8204d85815 100644 Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ