diff --git a/code/__DEFINES/~nova_defines/construction.dm b/code/__DEFINES/~nova_defines/construction.dm index e402c8142eb..849a0c17bf3 100644 --- a/code/__DEFINES/~nova_defines/construction.dm +++ b/code/__DEFINES/~nova_defines/construction.dm @@ -1,7 +1,7 @@ #define CAT_HEMOPHAGE "Hemophage Food" #define CAT_TESHARI "Teshari Food" -GLOBAL_LIST_INIT(crafting_category_food_skyrat, list( +GLOBAL_LIST_INIT(crafting_category_food_nova, list( CAT_HEMOPHAGE, CAT_TESHARI, )) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 3782f3074fe..1bdd26aeb01 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -97,7 +97,8 @@ GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS - make_skyrat_datum_references() //NOVA EDIT ADDITION - CUSTOMIZATION + make_nova_datum_references() //NOVA EDIT ADDITION - CUSTOMIZATION + init_nova_stack_recipes() //NOVA EDIT ADDITION - More sheet recipes init_crafting_recipes() init_crafting_recipes_atoms() @@ -107,7 +108,7 @@ if(ispath(path, /datum/crafting_recipe/stack)) continue var/datum/crafting_recipe/recipe = new path() - var/is_cooking = ((recipe.category in GLOB.crafting_category_food) || (recipe.category in GLOB.crafting_category_food_skyrat)) // NOVA EDIT - Add skyrat food crafting category + var/is_cooking = ((recipe.category in GLOB.crafting_category_food) || (recipe.category in GLOB.crafting_category_food_nova)) // NOVA EDIT - Add nova food crafting category recipe.reqs = sort_list(recipe.reqs, GLOBAL_PROC_REF(cmp_crafting_req_priority)) if(recipe.name != "" && recipe.result) if(is_cooking) @@ -128,7 +129,6 @@ /obj/item/stack/sheet/sinew = GLOB.sinew_recipes, /obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes, /obj/item/stack/sheet/mineral/sandstone = GLOB.sandstone_recipes, - /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, // NOVA EDIT ADDITION /obj/item/stack/sheet/mineral/sandbags = GLOB.sandbag_recipes, /obj/item/stack/sheet/mineral/diamond = GLOB.diamond_recipes, /obj/item/stack/sheet/mineral/uranium = GLOB.uranium_recipes, diff --git a/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 176b7ddcb3d..efc585d80ab 100644 --- a/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -20,7 +20,7 @@ // Iron -GLOBAL_LIST_INIT(skyrat_metal_recipes, list( +GLOBAL_LIST_INIT(nova_metal_recipes, list( new/datum/stack_recipe("wall mounted fire-safety closet", /obj/item/wallframe/firecloset, 2, time = 1.5 SECONDS, check_density = FALSE, category = CAT_FURNITURE), new/datum/stack_recipe("wall mounted emergency closet", /obj/item/wallframe/emcloset, 2, time = 1.5 SECONDS, check_density = FALSE, category = CAT_FURNITURE), new/datum/stack_recipe("wall mounted closet", /obj/item/wallframe/closet, 2, time = 1.5 SECONDS, check_density = FALSE, category = CAT_FURNITURE), @@ -35,29 +35,29 @@ GLOBAL_LIST_INIT(skyrat_metal_recipes, list( new/datum/stack_recipe("throwing wheel", /obj/structure/throwing_wheel, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), )) -GLOBAL_LIST_INIT(skyrat_metal_airlock_recipes, list( +GLOBAL_LIST_INIT(nova_metal_airlock_recipes, list( new /datum/stack_recipe("corporate airlock assembly", /obj/structure/door_assembly/door_assembly_corporate, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), new /datum/stack_recipe("service airlock assembly", /obj/structure/door_assembly/door_assembly_service, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), )) /obj/item/stack/sheet/iron/get_main_recipes() . = ..() - . += GLOB.skyrat_metal_recipes - add_recipes_to_sublist(., "airlock assemblies", GLOB.skyrat_metal_airlock_recipes) + . += GLOB.nova_metal_recipes + add_recipes_to_sublist(., "airlock assemblies", GLOB.nova_metal_airlock_recipes) // Plasteel -GLOBAL_LIST_INIT(skyrat_plasteel_recipes, list( +GLOBAL_LIST_INIT(nova_plasteel_recipes, list( new/datum/stack_recipe("plasteel barricade", /obj/structure/deployable_barricade/metal/plasteel, 2, time = 1 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_STRUCTURE), )) /obj/item/stack/sheet/plasteel/get_main_recipes() . = ..() - . += GLOB.skyrat_plasteel_recipes + . += GLOB.nova_plasteel_recipes // Rods -GLOBAL_LIST_INIT(skyrat_rod_recipes, list( +GLOBAL_LIST_INIT(nova_rod_recipes, list( new/datum/stack_recipe("towel bin", /obj/structure/towel_bin/empty, 2, time = 0.5 SECONDS, one_per_turf = FALSE, check_density = FALSE, category = CAT_CONTAINERS), new/datum/stack_recipe("guard rail", /obj/structure/deployable_barricade/guardrail, 2, time = 1 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_STRUCTURE), new/datum/stack_recipe("wrestling ropes", /obj/structure/railing/wrestling, 3, time = 1.8 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, check_density = FALSE, category = CAT_STRUCTURE), @@ -67,11 +67,11 @@ GLOBAL_LIST_INIT(skyrat_rod_recipes, list( /obj/item/stack/rods/get_main_recipes() . = ..() - . += GLOB.skyrat_rod_recipes + . += GLOB.nova_rod_recipes // Wood -GLOBAL_LIST_INIT(skyrat_wood_recipes, list( +GLOBAL_LIST_INIT(nova_wood_recipes, list( new/datum/stack_recipe("water basin", /obj/structure/reagent_water_basin, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("forging work bench", /obj/structure/reagent_crafting_bench, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("wooden half-barricade", /obj/structure/deployable_barricade/wooden, 5, time = 2 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_STRUCTURE), @@ -95,11 +95,11 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( /obj/item/stack/sheet/mineral/wood/get_main_recipes() . = ..() - . += GLOB.skyrat_wood_recipes + . += GLOB.nova_wood_recipes // Cloth -GLOBAL_LIST_INIT(skyrat_cloth_recipes, list( +GLOBAL_LIST_INIT(nova_cloth_recipes, list( new/datum/stack_recipe("fancy pillow", /obj/item/fancy_pillow, 3, check_density = FALSE, category = CAT_ENTERTAINMENT), new/datum/stack_recipe("towel", /obj/item/towel, 2, check_density = FALSE, category = CAT_CLOTHING), new/datum/stack_recipe("eyepatch wrap", /obj/item/clothing/glasses/eyepatch/wrap, 2, check_density = FALSE, category = CAT_CLOTHING), @@ -109,14 +109,14 @@ GLOBAL_LIST_INIT(skyrat_cloth_recipes, list( /obj/item/stack/sheet/cloth/get_main_recipes() . = ..() - . += GLOB.skyrat_cloth_recipes + . += GLOB.nova_cloth_recipes // Leather -GLOBAL_LIST_INIT(skyrat_leather_recipes, list( +GLOBAL_LIST_INIT(nova_leather_recipes, list( )) -GLOBAL_LIST_INIT(skyrat_leather_belt_recipes, list( +GLOBAL_LIST_INIT(nova_leather_belt_recipes, list( new/datum/stack_recipe("xenoarch belt", /obj/item/storage/belt/utility/xenoarch, 4, check_density = FALSE, category = CAT_CONTAINERS), new/datum/stack_recipe("medical bandolier", /obj/item/storage/belt/medbandolier, 5, check_density = FALSE, category = CAT_CONTAINERS), new/datum/stack_recipe("gear harness", /obj/item/clothing/under/misc/nova/gear_harness, 6, check_density = FALSE, category = CAT_CLOTHING), @@ -125,35 +125,35 @@ GLOBAL_LIST_INIT(skyrat_leather_belt_recipes, list( /obj/item/stack/sheet/leather/get_main_recipes() . = ..() - . += GLOB.skyrat_leather_recipes - add_recipes_to_sublist(., "belts", GLOB.skyrat_leather_belt_recipes) + . += GLOB.nova_leather_recipes + add_recipes_to_sublist(., "belts", GLOB.nova_leather_belt_recipes) // Titanium -GLOBAL_LIST_INIT(skyrat_titanium_recipes, list( +GLOBAL_LIST_INIT(nova_titanium_recipes, list( new/datum/stack_recipe("spaceship plating", /obj/item/stack/sheet/spaceship, 1, time = 5, check_density = FALSE, category = CAT_MISC), )) /obj/item/stack/sheet/mineral/titanium/get_main_recipes() . = ..() - . += GLOB.skyrat_titanium_recipes + . += GLOB.nova_titanium_recipes // Snow -GLOBAL_LIST_INIT(skyrat_snow_recipes, list( +GLOBAL_LIST_INIT(nova_snow_recipes, list( new/datum/stack_recipe("snow barricade", /obj/structure/deployable_barricade/snow, 2, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_STRUCTURE), )) /obj/item/stack/sheet/mineral/snow/get_main_recipes() . = ..() - . += GLOB.skyrat_snow_recipes + . += GLOB.nova_snow_recipes // Sand -GLOBAL_LIST_INIT(skyrat_sand_recipes, list( +GLOBAL_LIST_INIT(nova_sand_recipes, list( new/datum/stack_recipe("ant farm", /obj/structure/antfarm, 20, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), )) /obj/item/stack/ore/glass/get_main_recipes() . = ..() - . += GLOB.skyrat_sand_recipes + . += GLOB.nova_sand_recipes diff --git a/modular_nova/modules/customization/__HELPERS/global_lists.dm b/modular_nova/modules/customization/__HELPERS/global_lists.dm index d203c1ea805..ec7aea42e88 100644 --- a/modular_nova/modules/customization/__HELPERS/global_lists.dm +++ b/modular_nova/modules/customization/__HELPERS/global_lists.dm @@ -1,4 +1,4 @@ -/proc/make_skyrat_datum_references() +/proc/make_nova_datum_references() make_sprite_accessory_references() make_default_mutant_bodypart_references() make_body_marking_references() @@ -74,6 +74,40 @@ GLOB.features_block_lengths["[GLOB.dna_body_marking_blocks[marking_zone] + (feature_block_set - 1) * DNA_BLOCKS_PER_MARKING + color_block]"] = DNA_BLOCK_SIZE_COLOR GLOB.dna_total_feature_blocks += DNA_BLOCKS_PER_MARKING_ZONE +/proc/init_nova_stack_recipes() + var/list/additional_stack_recipes = list( + /obj/item/stack/sheet/leather = list(GLOB.nova_leather_recipes, GLOB.nova_leather_belt_recipes), + /obj/item/stack/sheet/mineral/titanium = list(GLOB.nova_titanium_recipes), + /obj/item/stack/sheet/mineral/snow = list(GLOB.nova_snow_recipes), + /obj/item/stack/sheet/iron = list(GLOB.nova_metal_recipes, GLOB.nova_metal_airlock_recipes), + /obj/item/stack/sheet/plasteel = list(GLOB.nova_plasteel_recipes), + /obj/item/stack/sheet/mineral/wood = list(GLOB.nova_wood_recipes), + /obj/item/stack/sheet/cloth = list(GLOB.nova_cloth_recipes), + /obj/item/stack/ore/glass = list(GLOB.nova_sand_recipes), + /obj/item/stack/rods = list(GLOB.nova_rod_recipes), + /obj/item/stack/sheet/mineral/stone = list(GLOB.stone_recipes), + /obj/item/stack/sheet/mineral/clay = list(GLOB.clay_recipes), + /obj/item/stack/sheet/plastic_wall_panel = list(GLOB.plastic_wall_panel_recipes), + /obj/item/stack/sheet/spaceshipglass = list(GLOB.spaceshipglass_recipes), + ) + for(var/stack in additional_stack_recipes) + for(var/material_list in additional_stack_recipes[stack]) + for(var/stack_recipe in material_list) + if(istype(stack_recipe, /datum/stack_recipe_list)) + var/datum/stack_recipe_list/stack_recipe_list = stack_recipe + for(var/nested_recipe in stack_recipe_list.recipes) + if(!nested_recipe) + continue + var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(stack, nested_recipe) + if(recipe.name != "" && recipe.result) + GLOB.crafting_recipes += recipe + else + if(!stack_recipe) + continue + var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(stack, stack_recipe) + if(recipe.name != "" && recipe.result) + GLOB.crafting_recipes += recipe + /proc/make_augment_references() // Here we build the global loadout lists for(var/path in subtypesof(/datum/augment_item)) diff --git a/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm b/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm index e66fcc48acb..ad4faebe2ca 100644 --- a/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm @@ -62,16 +62,23 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/structure/large_mortar/attackby(obj/item/attacking_item, mob/living/carbon/human/user) - if(istype(attacking_item, /obj/item/storage/bag)) + if(attacking_item.is_refillable()) + return + +/obj/structure/large_mortar/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + . = ..() + if(. || user.combat_mode || tool.is_refillable()) + return . + if(istype(tool, /obj/item/storage/bag)) if(length(contents) >= maximum_contained_items) - balloon_alert(user, "already full") - return TRUE + balloon_alert(user, "already full!") + return ITEM_INTERACT_BLOCKING - if(!length(attacking_item.contents)) + if(!length(tool.contents)) balloon_alert(user, "nothing to transfer!") - return TRUE + return ITEM_INTERACT_BLOCKING - for(var/obj/item/target_item in attacking_item.contents) + for(var/obj/item/target_item in tool.contents) if(length(contents) >= maximum_contained_items) break @@ -79,42 +86,62 @@ target_item.forceMove(src) if (length(contents) >= maximum_contained_items) - balloon_alert(user, "filled!") + balloon_alert(user, "filled") else balloon_alert(user, "transferred") - return TRUE + return ITEM_INTERACT_SUCCESS - if(istype(attacking_item, /obj/item/pestle)) + if(istype(tool, /obj/item/pestle)) if(!anchored) - balloon_alert(user, "secure to ground first") - return - - if(!length(contents)) - balloon_alert(user, "nothing to grind") - return + balloon_alert(user, "not secured!") + return ITEM_INTERACT_BLOCKING - if(user.getStaminaLoss() > LARGE_MORTAR_STAMINA_MINIMUM) - balloon_alert(user, "too tired") - return + if(!length(contents) && reagents.total_volume == 0) + balloon_alert(user, "mortar empty!") + return ITEM_INTERACT_BLOCKING var/list/choose_options = list( "Grind" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_grind"), - "Juice" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_juice") + "Juice" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_juice"), + "Mix" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_mix"), ) var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) - if(!length(contents) || !in_range(src, user) || !user.is_holding(attacking_item) && !picked_option) - return + if(user.getStaminaLoss() > LARGE_MORTAR_STAMINA_MINIMUM) + balloon_alert(user, "too tired!") + return ITEM_INTERACT_BLOCKING + + if(!in_range(src, user) || !user.is_holding(tool) || !picked_option) + return ITEM_INTERACT_BLOCKING + var/act_verb = LOWER_TEXT(picked_option) + var/act_verb_ing + if(act_verb == "juice") + act_verb_ing = "juicing" + else + act_verb_ing = "[act_verb]ing" - balloon_alert_to_viewers("grinding...") + var/has_resource + if(picked_option == "Mix") + has_resource = reagents.total_volume > 0 + else + has_resource = length(contents) > 0 + + if(!has_resource) + balloon_alert(user, "nothing to [act_verb]!") + return ITEM_INTERACT_BLOCKING + + balloon_alert_to_viewers("[act_verb_ing]...") if(!do_after(user, 5 SECONDS, target = src)) - balloon_alert_to_viewers("stopped grinding") - return + balloon_alert_to_viewers("stopped [act_verb_ing]") + return ITEM_INTERACT_BLOCKING user.adjustStaminaLoss(LARGE_MORTAR_STAMINA_USE) //This is a bit more tiring than a normal sized mortar and pestle switch(picked_option) if("Juice") for(var/obj/item/target_item as anything in contents) + if (reagents.total_volume >= reagents.maximum_volume) + balloon_alert(user, "overflowing!") + break if(target_item.juice_typepath) juice_target_item(target_item, user) else @@ -122,22 +149,28 @@ if("Grind") for(var/obj/item/target_item as anything in contents) + if (reagents.total_volume >= reagents.maximum_volume) + balloon_alert(user, "overflowing!") + break if(target_item.grind_results) grind_target_item(target_item, user) else juice_target_item(target_item, user) - return + if("Mix") + mix() + + return ITEM_INTERACT_SUCCESS - if(!attacking_item.grind_results && !attacking_item.juice_typepath) - balloon_alert(user, "can't grind this") - return ..() + if(!tool.grind_results && !tool.juice_typepath) + balloon_alert(user, "can't grind this!") + return ITEM_INTERACT_BLOCKING if(length(contents) >= maximum_contained_items) - balloon_alert(user, "already full") - return + balloon_alert(user, "already full!") + return ITEM_INTERACT_BLOCKING - attacking_item.forceMove(src) - return ..() + tool.forceMove(src) + return ITEM_INTERACT_SUCCESS ///Juices the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/juice_target_item(obj/item/to_be_juiced, mob/living/carbon/human/user) @@ -161,12 +194,30 @@ if(!to_be_ground.grind(src.reagents, user)) if(isstack(to_be_ground)) - to_chat(usr, span_notice("[src] attempts to grind as many pieces of [to_be_ground] as possible.")) + to_chat(user, span_notice("[src] attempts to grind as many pieces of [to_be_ground] as possible.")) else to_chat(user, span_danger("You fail to grind [to_be_ground].")) to_chat(user, span_notice("You break [to_be_ground] into a fine powder.")) QDEL_NULL(to_be_ground) +///Mixes contained reagents, creating butter/mayo/whipped cream +/obj/structure/large_mortar/proc/mix() + //Recipe to make Butter + var/butter_amt = FLOOR(reagents.get_reagent_amount(/datum/reagent/consumable/milk) / MILK_TO_BUTTER_COEFF, 1) + var/purity = reagents.get_reagent_purity(/datum/reagent/consumable/milk) + reagents.remove_reagent(/datum/reagent/consumable/milk, MILK_TO_BUTTER_COEFF * butter_amt) + for(var/i in 1 to butter_amt) + var/obj/item/food/butter/tasty_butter = new(drop_location()) + tasty_butter.reagents.set_all_reagents_purity(purity) + + //Recipe to make Mayonnaise + if (reagents.has_reagent(/datum/reagent/consumable/eggyolk)) + reagents.convert_reagent(/datum/reagent/consumable/eggyolk, /datum/reagent/consumable/mayonnaise) + + //Recipe to make whipped cream + if (reagents.has_reagent(/datum/reagent/consumable/cream)) + reagents.convert_reagent(/datum/reagent/consumable/cream, /datum/reagent/consumable/whipped_cream) + #undef LARGE_MORTAR_STAMINA_MINIMUM #undef LARGE_MORTAR_STAMINA_USE diff --git a/modular_nova/modules/primitive_cooking_additions/code/millstone.dm b/modular_nova/modules/primitive_cooking_additions/code/millstone.dm index 1763625802c..a8cf5da1b9a 100644 --- a/modular_nova/modules/primitive_cooking_additions/code/millstone.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/millstone.dm @@ -45,9 +45,7 @@ return ..() /obj/structure/millstone/atom_deconstruct(disassembled) - var/obj/item/stack/sheet/mineral/stone = new (drop_location()) - stone.amount = 6 - stone.update_appearance(UPDATE_ICON) + var/obj/item/stack/sheet/mineral/stone/stone = new(drop_location(), 6) transfer_fingerprints_to(stone) return ..() diff --git a/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm index 9367f564350..ef04741decc 100644 --- a/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm @@ -65,8 +65,10 @@ user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) deconstruct(TRUE) return ITEM_INTERACT_SUCCESS +/obj/machinery/oven/stone/on_deconstruction(disassembled) + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) + #undef OVEN_TRAY_Y_OFFSET diff --git a/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm index 5c9aea2d75d..d62ba670e11 100644 --- a/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm +++ b/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm @@ -13,8 +13,11 @@ /obj/machinery/primitive_stove/Initialize(mapload) . = ..() + var/obj/item/reagent_containers/cup/soup_pot/mapload_container + if(mapload) + mapload_container = new(loc) - AddComponent(/datum/component/stove/primitive, container_x = -7, container_y = 7, spawn_container = new /obj/item/reagent_containers/cup/soup_pot) + AddComponent(/datum/component/stove/primitive, container_x = -7, container_y = 7, spawn_container = mapload_container) /obj/machinery/primitive_stove/examine(mob/user) . = ..() @@ -32,10 +35,12 @@ user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) deconstruct(TRUE) return ITEM_INTERACT_SUCCESS +/obj/machinery/primitive_stove/on_deconstruction(disassembled) + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) + /// Stove component subtype with changed visuals and not much else /datum/component/stove/primitive flame_color = "#ff9900" diff --git a/modular_nova/modules/primitive_structures/code/storage_structures.dm b/modular_nova/modules/primitive_structures/code/storage_structures.dm index c781da63ae3..af3be6101a3 100644 --- a/modular_nova/modules/primitive_structures/code/storage_structures.dm +++ b/modular_nova/modules/primitive_structures/code/storage_structures.dm @@ -31,7 +31,6 @@ /obj/structure/rack/wooden/atom_deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) - return ..() // Barrel but it works like a crate @@ -82,10 +81,12 @@ if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) deconstruct(TRUE) return ITEM_INTERACT_SUCCESS +/obj/machinery/smartfridge/wooden/on_deconstruction(disassembled) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + /obj/machinery/smartfridge/wooden/structure_examine() . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") diff --git a/modular_nova/modules/reagent_forging/code/crafting_bench.dm b/modular_nova/modules/reagent_forging/code/crafting_bench.dm index 5b5f647cf44..a7552203021 100644 --- a/modular_nova/modules/reagent_forging/code/crafting_bench.dm +++ b/modular_nova/modules/reagent_forging/code/crafting_bench.dm @@ -36,6 +36,7 @@ /datum/crafting_bench_recipe/coil, /datum/crafting_bench_recipe/seed_mesh, /datum/crafting_bench_recipe/centrifuge, + /datum/crafting_bench_recipe/soup_pot, /datum/crafting_bench_recipe/bokken, /datum/crafting_bench_recipe/bow, ) @@ -153,10 +154,16 @@ return ..() /obj/structure/reagent_crafting_bench/wrench_act(mob/living/user, obj/item/tool) - tool.play_tool_sound(src) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + deconstruct(disassembled = TRUE) return ITEM_INTERACT_SUCCESS +/obj/structure/reagent_crafting_bench/atom_deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 5) + /obj/structure/reagent_crafting_bench/hammer_act(mob/living/user, obj/item/tool) playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE) if(length(contents)) diff --git a/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm b/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm index 626bdc62b7f..c9a15aa41ea 100644 --- a/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm +++ b/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm @@ -125,6 +125,14 @@ resulting_item = /obj/item/reagent_containers/cup/primitive_centrifuge required_good_hits = 4 +/datum/crafting_bench_recipe/soup_pot + recipe_name = "soup pot" + recipe_requirements = list( + /obj/item/forging/complete/plate = 4, + ) + resulting_item = /obj/item/reagent_containers/cup/soup_pot + required_good_hits = 10 + /datum/crafting_bench_recipe/bokken recipe_name = "bokken" recipe_requirements = list( diff --git a/modular_nova/modules/reagent_forging/code/forge.dm b/modular_nova/modules/reagent_forging/code/forge.dm index f0ac6a699b1..a808f837dbd 100644 --- a/modular_nova/modules/reagent_forging/code/forge.dm +++ b/modular_nova/modules/reagent_forging/code/forge.dm @@ -770,8 +770,6 @@ fail_message(user, "stopped smelting [rod_item]") return - var/src_turf = get_turf(src) - var/spawning_item = /obj/item/stack/sheet/iron var/rods_to_sheet_amount = round((rod_item.amount / 2)) var/used_rods = rod_item.amount @@ -779,10 +777,7 @@ used_rods = used_rods - 1 rod_item.use(used_rods) - var/obj/item/stack/sheet/iron/result = new spawning_item(src_turf) - - if(rods_to_sheet_amount > 1) - result.add(rods_to_sheet_amount - 1) + new /obj/item/stack/sheet/iron(drop_location(), rods_to_sheet_amount) balloon_alert_to_viewers("finished smelting!") @@ -794,8 +789,6 @@ var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/smithing, SKILL_SPEED_MODIFIER) var/obj/item/forging/forge_item = tool - in_use = TRUE - if(!forge_fuel_strong && !forge_fuel_weak) fail_message(user, "no fuel in [src]") return ITEM_INTERACT_SUCCESS @@ -806,9 +799,11 @@ balloon_alert_to_viewers("billowing...") + in_use = TRUE while(forge_temperature < 91) if(!do_after(user, skill_modifier * forge_item.toolspeed, target = src)) balloon_alert_to_viewers("stopped billowing") + in_use = FALSE return ITEM_INTERACT_SUCCESS forge_temperature += 10 @@ -940,7 +935,9 @@ return ITEM_INTERACT_SUCCESS /obj/structure/reagent_forge/wrench_act(mob/living/user, obj/item/tool) - tool.play_tool_sound(src) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return deconstruct(TRUE) return TRUE diff --git a/modular_nova/modules/reagent_forging/code/water_basin.dm b/modular_nova/modules/reagent_forging/code/water_basin.dm index 8b4318d7f63..f5c092e9a1b 100644 --- a/modular_nova/modules/reagent_forging/code/water_basin.dm +++ b/modular_nova/modules/reagent_forging/code/water_basin.dm @@ -58,13 +58,15 @@ return ..() /obj/structure/reagent_water_basin/wrench_act(mob/living/user, obj/item/tool) - tool.play_tool_sound(src) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return - for(var/i in 1 to 5) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) + deconstruct(disassembled = TRUE) + return ITEM_INTERACT_SUCCESS - qdel(src) - return TRUE +/obj/structure/reagent_water_basin/atom_deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 5) /obj/structure/reagent_water_basin/tong_act(mob/living/user, obj/item/tool) var/obj/item/forging/incomplete/search_incomplete = locate(/obj/item/forging/incomplete) in tool.contents