diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 09b2338b244f6..cf4824f20fbe5 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -118,6 +118,10 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar/metal, 3), \ new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ new/datum/stack_recipe("hygienebot assembly", /obj/item/bot_assembly/hygienebot, 2, time = 50), \ + new/datum/stack_recipe_list("weight machines", list( \ + new/datum/stack_recipe("chest press", /obj/structure/weightmachine/stacklifter, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bench press", /obj/structure/weightmachine/weightlifter, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ + )), \ new/datum/stack_recipe("shower", /obj/machinery/shower, 3, time = 25) )) @@ -367,6 +371,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteenXnineteen, 3), \ new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythreeXnineteen, 4), \ new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythreeXtwentythree, 5), \ + new/datum/stack_recipe("punching bag", /obj/structure/punching_bag, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ )) /obj/item/stack/sheet/cotton/cloth diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm index 8a73aff51a69d..63b220828f815 100644 --- a/code/modules/mining/lavaland/ruins/gym.dm +++ b/code/modules/mining/lavaland/ruins/gym.dm @@ -7,6 +7,47 @@ layer = WALL_OBJ_LAYER var/list/hit_sounds = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg',\ 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg') + var/buildstacktype = /obj/item/stack/sheet/cotton/cloth + var/buildstackamount = 5 + +/obj/structure/punching_bag/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + return..() + +/obj/structure/punching_bag/wrench_act(mob/living/user, obj/item/W) + if(..()) + return TRUE + add_fingerprint(user) + var/action = anchored ? "unbolts [src] from" : "bolts [src] to" + var/uraction = anchored ? "unbolt [src] from" : "bolt [src] to" + user.visible_message(span_warning("[user] [action] the floor."), span_notice("You start to [uraction] the floor..."), span_hear("You hear rustling noises.")) + if(W.use_tool(src, user, 50, volume=100, extra_checks = CALLBACK(src, PROC_REF(check_anchored_state), anchored))) + set_anchored(!anchored) + to_chat(user, span_notice("You [anchored ? "bolt" : "unbolt"] [src] from the floor.")) + return TRUE + +/obj/structure/punching_bag/wirecutter_act(mob/living/user, obj/item/W) + . = ..() + if(!anchored) + user.visible_message(span_warning("[user] cuts apart [src]."), span_notice("You start to cut apart [src]."), span_hear("You hear cutting.")) + if(W.use_tool(src, user, 50, volume=100)) + if(anchored) + return TRUE + to_chat(user, span_notice("You cut apart [src].")) + deconstruct(TRUE) + return TRUE + +/obj/structure/punching_bag/proc/check_anchored_state(check_anchored) + return anchored == check_anchored + +/obj/structure/punching_bag/examine(mob/user) + . = ..() + if(anchored) + . += span_notice("[src] is bolted to the floor.") + else + . += span_notice("[src] is no longer bolted to the floor, and the seams can be cut apart.") /obj/structure/punching_bag/attack_hand(mob/user as mob) . = ..() @@ -25,6 +66,8 @@ icon = 'icons/obj/gym_equipment.dmi' density = TRUE anchored = TRUE + var/buildstacktype = /obj/item/stack/sheet/metal + var/buildstackamount = 5 /obj/structure/weightmachine/proc/AnimateMachine(mob/living/user) return @@ -33,6 +76,45 @@ . = ..() icon_state = (obj_flags & IN_USE) ? "[base_icon_state]-u" : base_icon_state +/obj/structure/weightmachine/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + return..() + +/obj/structure/weightmachine/wrench_act(mob/living/user, obj/item/W) + if(..()) + return TRUE + add_fingerprint(user) + var/action = anchored ? "unbolts [src] from" : "bolts [src] to" + var/uraction = anchored ? "unbolt [src] from" : "bolt [src] to" + user.visible_message(span_warning("[user] [action] the floor."), span_notice("You start to [uraction] the floor..."), span_hear("You hear rustling noises.")) + if(W.use_tool(src, user, 50, volume=100, extra_checks = CALLBACK(src, PROC_REF(check_anchored_state), anchored))) + set_anchored(!anchored) + to_chat(user, span_notice("You [anchored ? "bolt" : "unbolt"] [src] from the floor.")) + return TRUE + +/obj/structure/weightmachine/screwdriver_act(mob/living/user, obj/item/W) + . = ..() + if(!anchored) + user.visible_message(span_warning("[user] screws apart [src]."), span_notice("You start to screw apart [src]."), span_hear("You hear screwing.")) + if(W.use_tool(src, user, 50, volume=100)) + if(anchored) + return TRUE + to_chat(user, span_notice("You screw apart [src].")) + deconstruct(TRUE) + return TRUE + +/obj/structure/weightmachine/proc/check_anchored_state(check_anchored) + return anchored == check_anchored + +/obj/structure/weightmachine/examine(mob/user) + . = ..() + if(anchored) + . += span_notice("[src] is bolted to the floor.") + else + . += span_notice("[src] is no longer bolted to the floor, and the screws are exposed.") + /obj/structure/weightmachine/update_overlays() . = ..() @@ -44,7 +126,7 @@ if(.) return if(obj_flags & IN_USE) - to_chat(user, "It's already in use - wait a bit!") + to_chat(user, span_warning("It's already in use - wait a bit!")) return else obj_flags |= IN_USE @@ -100,3 +182,4 @@ sleep(3) animate(user, pixel_y = 2, time = 3) sleep(3) +