diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 066c2568554..6b0cd953a68 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -302,6 +302,9 @@
if(reagents.total_volume<=0)
occupant_message("No available reagents to load syringe with.")
return
+ if(HAS_TRAIT(chassis.occupant, TRAIT_PACIFISM))
+ occupant_message("The [src] is lethally chambered! You don't want to risk harming anyone...")
+ return
var/turf/trg = get_turf(target)
var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1]
mechsyringe.forceMove(get_turf(chassis))
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 32a4ea0811a..4c7becc024e 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -74,6 +74,9 @@
if(ishuman(user))
if(!can_trigger_gun(user))
return
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You can't bring yourself to fire \the [src]! You don't want to risk harming anyone...")
+ return
if(user && user.get_active_held_item() == src) // Make sure our user is still holding us
var/turf/target_turf = get_turf(target)
if(target_turf)
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index 6cbec941538..65a38bb98e2 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -152,6 +152,9 @@
if(!tank && checktank)
to_chat(user, "\The [src] can't fire without a source of gas.")
return
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You can't bring yourself to fire \the [src]! You don't want to risk harming anyone..." )
+ return
if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting))
to_chat(user, "\The [src] lets out a weak hiss and doesn't react!")
return
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index ff62775bd90..ab7452c92f2 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -70,42 +70,45 @@
/obj/item/melee/powerfist/attack(mob/living/target, mob/living/user)
- if(!tank)
- to_chat(user, "\The [src] can't operate without a source of gas!")
- return
- var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting)
- var/turf/T = get_turf(src)
- if(!T)
- return
- T.assume_air(gasused)
- T.air_update_turf()
- if(!gasused)
- to_chat(user, "\The [src]'s tank is empty!")
- target.apply_damage((force / 5), BRUTE)
- playsound(loc, 'sound/weapons/punch1.ogg', 50, TRUE)
- target.visible_message("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!", \
- "[user]'s punches you!")
- return
- if(gasused.total_moles() < gasperfist * fisto_setting)
- to_chat(user, "\The [src]'s piston-ram lets out a weak hiss, it needs more gas!")
- playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE)
- target.apply_damage((force / 2), BRUTE)
- target.visible_message("[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \
- "[user]'s punch strikes with force!")
- return
- target.apply_damage(force * fisto_setting, BRUTE, wound_bonus = -25*fisto_setting**2)
- target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \
- "You cry out in pain as [user]'s punch flings you backwards!")
- new /obj/effect/temp_visual/kinetic_blast(target.loc)
- playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, TRUE)
- playsound(loc, 'sound/weapons/genhit2.ogg', 50, TRUE)
+ if(!tank)
+ to_chat(user, "\The [src] can't operate without a source of gas!")
+ return
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You don't want to harm other living beings!")
+ return
+ var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return
+ T.assume_air(gasused)
+ T.air_update_turf()
+ if(!gasused)
+ to_chat(user, "\The [src]'s tank is empty!")
+ target.apply_damage((force / 5), BRUTE)
+ playsound(loc, 'sound/weapons/punch1.ogg', 50, TRUE)
+ target.visible_message("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!", \
+ "[user]'s punches you!")
+ return
+ if(gasused.total_moles() < gasperfist * fisto_setting)
+ to_chat(user, "\The [src]'s piston-ram lets out a weak hiss, it needs more gas!")
+ playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE)
+ target.apply_damage((force / 2), BRUTE)
+ target.visible_message("[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \
+ "[user]'s punch strikes with force!")
+ return
+ target.apply_damage(force * fisto_setting, BRUTE, wound_bonus = -25*fisto_setting**2)
+ target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \
+ "You cry out in pain as [user]'s punch flings you backwards!")
+ new /obj/effect/temp_visual/kinetic_blast(target.loc)
+ playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, TRUE)
+ playsound(loc, 'sound/weapons/genhit2.ogg', 50, TRUE)
- var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
+ var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
- target.throw_at(throw_target, 5 * fisto_setting, 0.5 + (fisto_setting / 2))
+ target.throw_at(throw_target, 5 * fisto_setting, 0.5 + (fisto_setting / 2))
- log_combat(user, target, "power fisted", src)
+ log_combat(user, target, "power fisted", src)
- user.changeNext_move(CLICK_CD_MELEE * click_delay)
+ user.changeNext_move(CLICK_CD_MELEE * click_delay)
- return
+ return
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index c1d259678bf..0e6c842f1d4 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -613,6 +613,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user)
. = ..()
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ return
var/atom/throw_target = get_edge_target_turf(target, user.dir)
if(homerun_ready)
user.visible_message("It's a home run!")
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index c3b3cf5a61b..f4412c854c6 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -1181,6 +1181,9 @@
var/turf/T = get_turf(target)
if(!T || timer > world.time)
return
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You can't bring yourself to fire \the [src]! You don't want to risk harming anyone...")
+ return
calculate_anger_mod(user)
timer = world.time + CLICK_CD_MELEE //by default, melee attacks only cause melee blasts, and have an accordingly short cooldown
if(proximity_flag)