diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 1b5cbbc7b4e..fd2ba4b08a0 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -9,6 +9,7 @@ var/unlocked = FALSE var/open = FALSE var/brightness_on = 8 //can't remember what the maxed out value is + climb_allowed = TRUE /obj/machinery/floodlight/Initialize(mapload) . = ..() @@ -89,6 +90,8 @@ update_icon() /obj/machinery/floodlight/attackby(obj/item/W, mob/user) + if(user.a_intent == INTENT_HARM) + return ..() if(W.is_screwdriver()) if(!open) if(unlocked) diff --git a/code/game/machinery/fossilrevive.dm b/code/game/machinery/fossilrevive.dm index 6f63a58a493..dbd5b79bf6f 100644 --- a/code/game/machinery/fossilrevive.dm +++ b/code/game/machinery/fossilrevive.dm @@ -23,10 +23,12 @@ var/obj/item/fossil/mosquito = I if(mosquito.processable == "seed") addtimer(CALLBACK(src, PROC_REF(findsaway), "seed"), 100) + to_chat(user, SPAN_NOTICE("[src] begins processing [mosquito].")) reviving = TRUE mosquito.processable = FALSE else to_chat(user, SPAN_WARNING("That fossil has either already been processed, or does not contain valid genetic material.")) + . = ..() /obj/machinery/fossilrevive/proc/findsaway(generatetype) var/droploc = get_turf(src) diff --git a/code/game/machinery/holoposter.dm b/code/game/machinery/holoposter.dm index 18b9881985d..c8033af2527 100644 --- a/code/game/machinery/holoposter.dm +++ b/code/game/machinery/holoposter.dm @@ -100,6 +100,7 @@ GLOBAL_LIST_EMPTY(holoposters) machine_stat &= ~BROKEN update_icon() return + . = ..() /obj/machinery/holoposter/attack_ai(mob/user) return attack_hand(user) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 31c3183bf2b..8dfecee5121 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -7,6 +7,7 @@ opacity = 1 density = 0 anchored = TRUE + var/obj/item/stack/mat = /obj/item/stack/material/plastic /obj/structure/curtain/open icon_state = "open" @@ -38,13 +39,14 @@ layer = 3.3 /obj/structure/curtain/attackby(obj/item/P, mob/user) + if(user.a_intent == INTENT_HARM) + return ..() if(P.is_wirecutter()) playsound(src, P.tool_sound, 50, 1) - to_chat(user, "You start to cut the shower curtains.") + to_chat(user, "You start to cut [src].") if(do_after(user, 10)) - to_chat(user, "You cut the shower curtains.") - var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) - A.amount = 3 + to_chat(user, "You cut [src].") + new mat(src.loc, 3) qdel(src) return else @@ -97,6 +99,7 @@ desc = "A curtain fasioned out of Goliath hide - frequently used to keep flying ash out of a building." icon = 'icons/obj/lavaland.dmi' icon_state = "goliath_closed" + mat = /obj/item/stack/animalhide/goliath_hide /obj/structure/curtain/ashlander/toggle() set_opacity(!opacity) @@ -109,17 +112,3 @@ plane = OBJ_PLANE layer = 3.3 -/obj/structure/curtain/ashlander/attackby(obj/item/P, mob/user) - if(P.is_wirecutter()) - playsound(src, P.tool_sound, 50, 1) - to_chat(user, "You start to cut the hide curtain.") - if(do_after(user, 10)) - to_chat(user, "You cut the hide curtain.") - var/obj/item/stack/animalhide/goliath_hide/A = new /obj/item/stack/animalhide/goliath_hide( src.loc ) - A.amount = 3 - qdel(src) - return - else - src.attack_hand(user) - return - diff --git a/code/game/objects/structures/dancepole.dm b/code/game/objects/structures/dancepole.dm index 41a8e3b8bd9..bd11b41e057 100644 --- a/code/game/objects/structures/dancepole.dm +++ b/code/game/objects/structures/dancepole.dm @@ -8,6 +8,9 @@ anchored = 1 /obj/structure/dancepole/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(user.a_intent == INTENT_HARM) + return ..() + if(O.is_wrench()) anchored = !anchored playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index 81ac90e359f..82c954d2d32 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -72,6 +72,8 @@ return ..() /obj/structure/fence/attackby(obj/item/W, mob/user) + if(user.a_intent == INTENT_HARM) + return ..() if(W.is_wirecutter()) if(!cuttable) to_chat(user, SPAN_WARNING( "This section of the fence can't be cut.")) @@ -98,7 +100,7 @@ visible_message(SPAN_NOTICE("\The [user] completely cuts through \the [src].")) to_chat(user, SPAN_NOTICE("The hole in \the [src] is now big enough to walk through.")) update_cut_status() - return TRUE + return TRUE /obj/structure/fence/proc/update_cut_status() if(!cuttable) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 4aa3ea3ba16..81d9f24f58a 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -100,6 +100,8 @@ /obj/structure/flora/ausbushes/attackby(obj/item/W as obj, mob/user as mob) // Dismantle + if(user.a_intent == INTENT_HARM) // who said you CAN'T touch grass (violently)? + return ..() if(istype(W, /obj/item/shovel)) playsound(src.loc, W.tool_sound, 50, 1) if(do_after(user, 10, src)) diff --git a/code/game/objects/structures/flora/rocks.dm b/code/game/objects/structures/flora/rocks.dm index 04ac335af12..74528dfd6a4 100644 --- a/code/game/objects/structures/flora/rocks.dm +++ b/code/game/objects/structures/flora/rocks.dm @@ -29,9 +29,22 @@ /obj/structure/flora/rock/attackby(obj/item/W as obj, mob/user as mob) //Shamelessly copied from mine_outcrops.dm if (istype(W, /obj/item/pickaxe)) + var/obj/item/pickaxe/P = W to_chat(user, "[user] begins to hack away at \the [src].") - if(do_after(user,40)) + if(do_after(user,P.digspeed)) to_chat(user, "You have finished digging!") - new outcropdrop(get_turf(src),rand(mindrop,upperdrop)) - qdel(src) + GetDrilled() return + return + . = ..() + +/obj/structure/flora/rock/bullet_act(obj/projectile/P, def_zone) + if(P.damage_flag == ARMOR_BOMB) //Intended for kinetic accelerators/daggers to just get rid of this stuff quickly. They're rocks. + GetDrilled() + return + . = ..() + +/obj/structure/flora/rock/proc/GetDrilled() + new outcropdrop(get_turf(src),rand(mindrop,upperdrop)) + qdel(src) + diff --git a/code/modules/mining/mine_outcrops.dm b/code/modules/mining/mine_outcrops.dm index 415c4fb0537..d5c769d7747 100644 --- a/code/modules/mining/mine_outcrops.dm +++ b/code/modules/mining/mine_outcrops.dm @@ -99,12 +99,24 @@ /obj/structure/outcrop/attackby(obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/pickaxe)) + var/obj/item/pickaxe/P = W to_chat(user, "[user] begins to hack away at \the [src].") - if(do_after(user,40)) + if(do_after(user,P.digspeed)) to_chat(user, "You have finished digging!") - new outcropdrop(get_turf(src), rand(mindrop,upperdrop)) - qdel(src) + GetDrilled() return + return + . = ..() + +/obj/structure/outcrop/bullet_act(obj/projectile/P, def_zone) + if(P.damage_flag == ARMOR_BOMB) //Intended for kinetic accelerators/daggers to just get rid of this stuff quickly. They're rocks. + GetDrilled() + return + . = ..() + +/obj/structure/outcrop/proc/GetDrilled() + new outcropdrop(get_turf(src), rand(mindrop,upperdrop)) + qdel(src) /obj/random/outcrop //In case you want an outcrop without pre-determining the type of ore. name = "random rock outcrop"