diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index f5bdfbacaa0..0041f75b666 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -150,3 +150,10 @@
atmosanalyzer_scan(air_contents, user)
return
+
+/obj/machinery/portable_atmospherics/attacked_by(obj/item/I, mob/user)
+ if(I.force < 10 && !(stat & BROKEN))
+ take_damage(0)
+ else
+ add_fingerprint(user)
+ ..()
\ No newline at end of file
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 09604252b0d..1ef0434557d 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -837,26 +837,7 @@
to_chat(user, "You stop installing [M].")
else
- return attacked_by(W, user)
-
-/obj/mecha/attacked_by(obj/item/I, mob/user)
- log_message("Attacked by [I]. Attacker - [user]")
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- var/deflection = deflect_chance
- var/dam_coeff = 1
- for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment)
- if(B.attack_react(user))
- deflection *= B.deflect_coeff
- dam_coeff *= B.damage_coeff
- break
- if(prob(deflection))
- to_chat(user, "[I] bounces off [src]\s armor.")
- log_append_to_last("Armor saved.")
- else
- user.visible_message("[user] hits [src] with [I].", "You hit [src] with [I].")
- take_damage(round(I.force * dam_coeff), I.damtype)
- check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
+ return ..()
/obj/mecha/mech_melee_attack(obj/mecha/M)
if(!has_charge(melee_energy_drain))
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 2a7ad987f47..9ccbc3bffd5 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -19,6 +19,7 @@
var/max_water = 50
var/last_use = 1.0
var/safety = 1
+ var/refilling = FALSE
var/sprite_name = "fire_extinguisher"
var/power = 5 //Maximum distance launched water will travel
var/precision = 0 //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row
@@ -55,6 +56,13 @@
to_chat(user, "The safety is [safety ? "on" : "off"].")
return
+/obj/item/extinguisher/attack_obj(obj/O, mob/living/user)
+ if(AttemptRefill(O, user))
+ refilling = TRUE
+ return FALSE
+ else
+ return ..()
+
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
if(istype(target, /obj/structure/reagent_dispensers/watertank) && target.Adjacent(user))
var/safety_save = safety
@@ -78,11 +86,15 @@
return 0
/obj/item/extinguisher/afterattack(atom/target, mob/user , flag)
+ . = ..()
//TODO; Add support for reagents in water.
if(target.loc == user)//No more spraying yourself when putting your extinguisher away
return
- if(AttemptRefill(target, user))
+
+ if(refilling)
+ refilling = FALSE
return
+
if(!safety)
if(src.reagents.total_volume < 1)
to_chat(usr, "\The [src] is empty.")
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 9de2294810f..f3a4b8a241c 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -197,15 +197,7 @@
W.state = WINDOW_OUT_OF_FRAME
to_chat(user, "You place the [W] on [src].")
W.update_nearby_icons()
- return
-/obj/structure/grille/attacked_by(obj/item/I, mob/living/user)
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- if(!(I.flags&NOBLUDGEON))
- if(I.force)
- visible_message("[user] has hit [src] with [I]!")
- take_damage(I.force * 0.3, I.damtype)
/obj/structure/grille/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 2c06923bac3..b77efc64ec8 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -18,11 +18,12 @@ var/const/MAX_ACTIVE_TIME = 400
flags = AIRTIGHT
flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES
layer = MOB_LAYER
+ max_integrity = 100
var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case
- var/sterile = 0
- var/real = 1 //0 for the toy, 1 for real. Sure I could istype, but fuck that.
+ var/sterile = FALSE
+ var/real = TRUE //0 for the toy, 1 for real. Sure I could istype, but fuck that.
var/strength = 5
var/attached = 0
@@ -32,6 +33,9 @@ var/const/MAX_ACTIVE_TIME = 400
if(obj_integrity < 90)
Die()
+/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, params)
+ return O.attack_obj(src, user)
+
/obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens
return attack_hand(user)
@@ -57,10 +61,6 @@ var/const/MAX_ACTIVE_TIME = 400
if(sterile)
. += "It looks like the proboscis has been removed."
-/obj/item/clothing/mask/facehugger/attackby(obj/item/O,mob/m, params)
- if(O.force)
- Die()
-
/obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature > 300)
@@ -234,9 +234,6 @@ var/const/MAX_ACTIVE_TIME = 400
/obj/item/clothing/mask/facehugger/lamarr
name = "Lamarr"
- desc = "The worst she might do is attempt to... couple with your head."//hope we don't get sued over a harmless reference, rite?
+ desc = "The worst she might do is attempt to... couple with your head." //hope we don't get sued over a harmless reference, rite?
sterile = 1
- gender = FEMALE
-
-/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled
- return
+ gender = FEMALE
\ No newline at end of file
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 695490a6c5b..b5611fbfc30 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -706,17 +706,12 @@
else
return ..()
-// called after an attack with a light item
-// shatter light, unless it was an attempt to put it in a light socket
-// now only shatter if the intent was harm
-
-/obj/item/light/afterattack(atom/target, mob/user, proximity)
- if(!proximity) return
- if(istype(target, /obj/machinery/light))
- return
- if(user.a_intent != INTENT_HARM)
- return
+/obj/item/light/attack(mob/living/M, mob/living/user, def_zone)
+ ..()
+ shatter()
+/obj/item/light/attack_obj(obj/O, mob/living/user)
+ ..()
shatter()
/obj/item/light/proc/shatter()