diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm index a2145e67ee..c6bb350929 100644 --- a/code/game/objects/items/miscellaneous.dm +++ b/code/game/objects/items/miscellaneous.dm @@ -58,6 +58,21 @@ new /obj/effect/abstract/DPtarget(get_turf(src), pod) +/obj/item/choice_beacon/ingredients + name = "ingredient box delivery beacon" + desc = "Summon a box of ingredients from a wide selection!" + icon_state = "gangtool-red" + +/obj/item/choice_beacon/ingredients/generate_display_names() + var/static/list/ingredientboxes + if(!ingredientboxes) + ingredientboxes = list() + var/list/templist = typesof(/obj/item/storage/box/ingredients) + for(var/V in templist) + var/obj/item/storage/box/ingredients/A = V + ingredientboxes[initial(A.theme_name)] = A + return ingredientboxes + /obj/item/choice_beacon/hero name = "heroic beacon" desc = "To summon heroes from the past to protect the future." @@ -72,7 +87,6 @@ hero_item_list[initial(A.name)] = A return hero_item_list - /obj/item/storage/box/hero name = "Courageous Tomb Raider - 1940's." @@ -115,4 +129,5 @@ icon = 'icons/obj/supermatter.dmi' icon_state = "supermatterspray" w_class = WEIGHT_CLASS_SMALL - var/usesleft = 2 \ No newline at end of file + var/usesleft = 2 + diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a54d126abb..b596e40e36 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -120,6 +120,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ )), \ null, \ new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \ )) @@ -255,6 +256,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\ null, \ new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ + new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar, 3), \ new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\ )) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 489704dbd5..a67757a535 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -946,12 +946,47 @@ /obj/item/reagent_containers/food/snacks/grown/apple, /obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/grown/cherries, + /obj/item/reagent_containers/food/snacks/grown/berries, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/soybeans, /obj/item/reagent_containers/food/snacks/grown/corn, /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet, - /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle) + /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, + /obj/item/reagent_containers/food/snacks/faggot, + /obj/item/reagent_containers/food/snacks/grown/citrus/orange, + /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, + /obj/item/reagent_containers/food/snacks/grown/citrus/lime, + /obj/item/reagent_containers/food/snacks/grown/bluecherries, + /obj/item/reagent_containers/food/snacks/grown/cocoapod, + /obj/item/reagent_containers/food/snacks/grown/vanillapod, + /obj/item/reagent_containers/food/snacks/grown/grapes, + /obj/item/reagent_containers/food/snacks/grown/strawberry, + /obj/item/reagent_containers/food/snacks/grown/whitebeet, + /obj/item/reagent_containers/food/snacks/meat/slab/bear, + /obj/item/reagent_containers/food/snacks/meat/slab/spider, + /obj/item/reagent_containers/food/snacks/spidereggs, + /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/reagent_containers/food/snacks/meat/slab/xeno, + /obj/item/reagent_containers/food/snacks/meat/slab/corgi, + /obj/item/reagent_containers/food/snacks/grown/oat, + /obj/item/reagent_containers/food/snacks/grown/wheat, + /obj/item/reagent_containers/honeycomb, + /obj/item/reagent_containers/food/snacks/grown/watermelon, + /obj/item/reagent_containers/food/snacks/grown/onion, + /obj/item/reagent_containers/food/snacks/grown/peach, + /obj/item/reagent_containers/food/snacks/grown/peanut, + /obj/item/reagent_containers/food/snacks/grown/pineapple, + /obj/item/reagent_containers/food/snacks/grown/pumpkin, + /obj/item/reagent_containers/food/snacks/meat/rawcrab, + /obj/item/reagent_containers/food/snacks/meat/slab/goliath, + /obj/item/reagent_containers/food/snacks/meat/slab/chicken, + /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime, + /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem, + /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard, + /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton, + /obj/item/reagent_containers/food/snacks/egg, + /obj/item/reagent_containers/food/snacks/grown/eggplant) new randomFood(src) /obj/item/storage/box/ingredients/fiesta @@ -1061,6 +1096,15 @@ new /obj/item/reagent_containers/food/snacks/grown/cabbage(src) new /obj/item/reagent_containers/food/snacks/grown/chili(src) +/obj/item/storage/box/ingredients/sushi + theme_name = "sushi" + +/obj/item/storage/box/ingredients/sushi/PopulateContents() + for(var/i in 1 to 3) + new /obj/item/reagent_containers/food/snacks/sea_weed(src) + new /obj/item/reagent_containers/food/snacks/carpmeat(src) + new /obj/item/reagent_containers/food/snacks/meat/rawcrab(src) + /obj/item/storage/box/emptysandbags name = "box of empty sandbags" diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index bfbd1d519b..f11c89d00c 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -24,6 +24,7 @@ w_class = WEIGHT_CLASS_SMALL armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 30, "acid" = 30) resistance_flags = FIRE_PROOF | ACID_PROOF + mutantrace_variation = STYLE_MUZZLE var/voice_unknown = TRUE ///This makes it so that your name shows up as unknown when wearing the mask. /obj/item/clothing/mask/luchador diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index b18dfc7968..204e5ce455 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -189,12 +189,11 @@ GLOBAL_VAR_INIT(frying_hardmode, TRUE) GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE) GLOBAL_LIST_INIT(frying_bad_chems, list( -/datum/reagent/toxin/bad_food = 10, -/datum/reagent/clf3 = 2, +/datum/reagent/toxin/bad_food = 3, /datum/reagent/drug/aranesp = 2, -/datum/reagent/blackpowder = 10, -/datum/reagent/phlogiston = 3, -/datum/reagent/toxin/cyanide = 3, +/datum/reagent/toxin = 2, +/datum/reagent/lithium = 2, +/datum/reagent/mercury = 2, )) /obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried) @@ -227,8 +226,10 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( var/bad_chem = GLOB.frying_bad_chems[R] var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem] if(GLOB.frying_bad_chem_add_volume) - reagents.maximum_volume += bad_chem_amount + reagents.maximum_volume += bad_chem_amount + 2 //Added room for condensed cooking oil reagents.add_reagent(bad_chem, bad_chem_amount) + //All fried inedible items also get condensed cooking oil added, which induces minor vomiting and heart damage + reagents.add_reagent(/datum/reagent/toxin/condensed_cooking_oil, 2) /obj/item/reagent_containers/food/snacks/deepfryholder/Destroy() if(trash) diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index db76af4d32..b41c0d8505 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -27,7 +27,7 @@ suit = /obj/item/clothing/suit/toggle/chef head = /obj/item/clothing/head/chefhat mask = /obj/item/clothing/mask/fakemoustache/italian - backpack_contents = list(/obj/item/sharpener = 1) + backpack_contents = list(/obj/item/sharpener = 1, /obj/item/choice_beacon/ingredients = 1) /datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) ..() @@ -43,10 +43,6 @@ ..() if(visualsOnly) return - var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients) - var/chosen_box = pick(possible_boxes) - var/obj/item/storage/box/I = new chosen_box(src) - H.equip_to_slot_or_del(I,SLOT_IN_BACKPACK) var/datum/martial_art/cqc/under_siege/justacook = new justacook.teach(H) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 1309fae60c..103e8164f9 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -702,8 +702,8 @@ /mob/living/do_resist_grab(moving_resist, forced, silent = FALSE) . = ..() - if(pulledby.grab_state) - if(CHECK_MOBILITY(src, MOBILITY_STAND) && prob(30/pulledby.grab_state)) + if(pulledby.grab_state > GRAB_PASSIVE) + if(CHECK_MOBILITY(src, MOBILITY_RESIST) && prob(30/pulledby.grab_state)) visible_message("[src] has broken free of [pulledby]'s grip!") pulledby.stop_pulling() return TRUE diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index cfb0588f8f..305d12b3c5 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -495,6 +495,24 @@ toxpwr = 0.5 taste_description = "bad cooking" +/datum/reagent/toxin/condensed_cooking_oil + name = "Condensed Cooking Oil" + description = "Taste the consequences of your mistakes." + reagent_state = LIQUID + color = "#d6d6d8" + metabolization_rate = 0.25 * REAGENTS_METABOLISM + toxpwr = 0 + taste_mult = -2 + taste_description = "awful cooking" + +/datum/reagent/toxin/condensed_cooking_oil/on_mob_life(mob/living/carbon/M) + if(prob(15)) + M.vomit() + else + if(prob(40)) + M.adjustOrganLoss(ORGAN_SLOT_HEART, 0.5) //For reference, bungotoxin does 3 + ..() + /datum/reagent/toxin/itching_powder name = "Itching Powder" description = "A powder that induces itching upon contact with the skin. Causes the victim to scratch at their itches and has a very low chance to decay into Histamine." diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 74e99cc326..800d66969d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -388,3 +388,67 @@ /obj/item/reagent_containers/glass/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "bottle") + +//Mortar & Pestle + +/obj/item/pestle + name = "pestle" + desc = "An ancient, simple tool used in conjunction with a mortar to grind or juice items." + icon = 'icons/obj/chemical.dmi' + icon_state = "pestle" + force = 4 + +/obj/item/reagent_containers/glass/mortar + name = "mortar" + desc = "A specially formed bowl of ancient design. It is possible to crush or juice items placed in it using a pestle; however the process, unlike modern methods, is slow and physically exhausting. Alt click to eject the item." + icon_state = "mortar" + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50) + item_flags = NO_MAT_REDEMPTION + reagent_flags = OPENCONTAINER + spillable = TRUE + var/obj/item/grinded + +/obj/item/reagent_containers/glass/mortar/AltClick(mob/user) + . = ..() + if(grinded) + grinded.forceMove(drop_location()) + grinded = null + to_chat(user, "You eject the item inside.") + return TRUE + +/obj/item/reagent_containers/glass/mortar/attackby(obj/item/I, mob/living/carbon/human/user) + ..() + if(istype(I,/obj/item/pestle)) + if(grinded) + if(IS_STAMCRIT(user)) + to_chat(user, "You are too tired to work!") + return + to_chat(user, "You start grinding...") + if((do_after(user, 25, target = src)) && grinded) + user.adjustStaminaLoss(20) + if(grinded.juice_results) //prioritize juicing + grinded.on_juice() + reagents.add_reagent_list(grinded.juice_results) + to_chat(user, "You juice [grinded] into a fine liquid.") + QDEL_NULL(grinded) + return + grinded.on_grind() + reagents.add_reagent_list(grinded.grind_results) + if(grinded.reagents) //food and pills + grinded.reagents.trans_to(src, grinded.reagents.total_volume) + to_chat(user, "You break [grinded] into powder.") + QDEL_NULL(grinded) + return + return + else + to_chat(user, "There is nothing to grind!") + return + if(grinded) + to_chat(user, "There is something inside already!") + return + if(I.juice_results || I.grind_results) + I.forceMove(src) + grinded = I + return + to_chat(user, "You can't grind this!") diff --git a/html/changelogs/AutoChangeLog-pr-11546.yml b/html/changelogs/AutoChangeLog-pr-11546.yml new file mode 100644 index 0000000000..260204e8e0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11546.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "Ports over TG's Mortars and Pestles." diff --git a/html/changelogs/AutoChangeLog-pr-11580.yml b/html/changelogs/AutoChangeLog-pr-11580.yml new file mode 100644 index 0000000000..4dd8e6daf3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11580.yml @@ -0,0 +1,5 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "new reagent 'Condensed Cooking Oil'" + - tweak: "list of chems that can go into fried non-food items was changed" diff --git a/html/changelogs/AutoChangeLog-pr-11590.yml b/html/changelogs/AutoChangeLog-pr-11590.yml new file mode 100644 index 0000000000..e8241cb0ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11590.yml @@ -0,0 +1,6 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "added beacon for cooks to choose an ingredient box, which replaces the random box they used to receive" + - rscadd: "added a new sushi ingredients box" + - rscadd: "added more items to the wildcard box's possible contents" diff --git a/html/changelogs/AutoChangeLog-pr-11591.yml b/html/changelogs/AutoChangeLog-pr-11591.yml new file mode 100644 index 0000000000..f2c06035f1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11591.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "insidious balaclava muzzlepsprite works" diff --git a/html/changelogs/AutoChangeLog-pr-11601.yml b/html/changelogs/AutoChangeLog-pr-11601.yml new file mode 100644 index 0000000000..d327045d12 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11601.yml @@ -0,0 +1,4 @@ +author: "Kraseo" +delete-after: True +changes: + - bugfix: "You can break out of neckgrabs once more." diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index b13e06e824..76094938e8 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ