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"