diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index f902ae5917d..240b2378209 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -83,23 +83,28 @@
M.drop_item()
return
+ if(isliving(user))
+ var/mob/living/L = user
+ if(!can_trigger_gun(L))
+ return
+
+ process_fire(target,user,flag,params)
+
+/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/user)
if (!user.IsAdvancedToolUser())
user << "You don't have the dexterity to do this!"
- return
+ return 0
if(trigger_guard)
- if(istype(user, /mob/living))
- var/mob/living/M = user
- if (HULK in M.mutations)
- M << "Your meaty finger is much too large for the trigger guard!"
- return
+ if (HULK in user.mutations)
+ user << "Your meaty finger is much too large for the trigger guard!"
+ return 0
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna && NOGUNS in H.dna.species.specflags)
user << "Your fingers don't fit in the trigger guard!"
- return
-
- process_fire(target,user,flag,params)
+ return 0
+ return 1
/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params)
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 49727229591..c829cff0c4a 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -175,7 +175,7 @@
return
/obj/item/weapon/gun/projectile/revolver/russian/attack_self(mob/user as mob)
- if(!spun && get_ammo(0,0))
+ if(!spun && can_shoot())
user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.")
Spin()
else
@@ -193,34 +193,35 @@
user << "[src] is empty."
/obj/item/weapon/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)
- if(!spun && get_ammo(0,0))
- user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.")
- Spin()
- ..()
- spun = 0
-
-/obj/item/weapon/gun/projectile/revolver/russian/attack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj)
- if(!spun && get_ammo(0,0))
- user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.")
- Spin()
+ if(user.a_intent == "harm") // Flogging action
+ return
+ if(isliving(user))
+ if(!can_trigger_gun(user))
+ return
+ if(target != user)
+ user << "A mechanism prevents you from shooting anyone but yourself."
return
-
- if(target == user)
- if(!chambered)
- user.visible_message("*click*", "*click*")
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(!spun)
+ user << "You need to spin the revolver's chamber first."
return
- if(isliving(target) && isliving(user))
- var/obj/item/organ/limb/affecting = user.zone_sel.selecting
- if(affecting == "head")
- var/obj/item/ammo_casing/AC = chambered
- if(AC.fire(user, user))
+ spun = 0
+
+ if(chambered)
+ var/obj/item/ammo_casing/AC = chambered
+ if(AC.fire(user, user))
+ playsound(user, fire_sound, 50, 1)
+ var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting))
+ var/limb_name = affecting.getDisplayName()
+ if(affecting == "head" || affecting == "eyes" || affecting == "mouth")
user.apply_damage(300, BRUTE, affecting)
- playsound(user, fire_sound, 50, 1)
- user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a [istype(AC.BB, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
- return
+ user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!")
else
- user.visible_message("*click*", "*click*")
- return
- ..()
+ user.visible_message("[user.name] cowardly fires [src] at \his [limb_name]!", "You cowardly fire [src] at your [limb_name]!", "You hear a gunshot!")
+ return
+
+ user.visible_message("*click*")
+ playsound(user, 'sound/weapons/empty.ogg', 100, 1)