diff --git a/code/datums/martial.dm b/code/datums/martial.dm
index 2929c4b0a2e..c6070385aac 100644
--- a/code/datums/martial.dm
+++ b/code/datums/martial.dm
@@ -295,7 +295,7 @@
D.emote("scream")
D.drop_item()
D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
- D.Stun(2)
+ D.Stun(3)
return 1
return basic_hit(A,D)
@@ -312,10 +312,10 @@
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.weakened)
D.visible_message("[A] knees [D] in the stomach!", \
- "[A] winds you with a knee in the stomach!")
+ "[A] winds you with a knee in the stomach!")
D.audible_message("[D] gags!")
D.losebreath += 3
- D.Stun(1)
+ D.Stun(2)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return 1
return basic_hit(A,D)
@@ -327,6 +327,7 @@
D.apply_damage(20, BRUTE, "head")
D.drop_item()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
+ D.Stun(4)
return 1
return basic_hit(A,D)
@@ -354,10 +355,14 @@
add_to_streak("H")
if(check_streak(A,D))
return 1
- D.visible_message("[A] [pick("punches", "kicks", "chops", "hits", "slams")] [D]!", \
- "[A] hits you!")
- D.apply_damage(10, BRUTE)
+ var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams")
+ D.visible_message("[A] [atk_verb] [D]!", \
+ "[A] [atk_verb] you!")
+ D.apply_damage(rand(10,15), BRUTE)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ if(prob(D.getBruteLoss()) && !D.lying)
+ D.visible_message("[D] stumbles and falls!", "The blow sends you to the ground!")
+ D.Weaken(4)
return 1
diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm
index c641b5f6392..d08c6af4329 100644
--- a/code/game/gamemodes/gang/gang.dm
+++ b/code/game/gamemodes/gang/gang.dm
@@ -8,6 +8,17 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
var/list/datum/gang/gangs = list()
var/datum/gang_points/gang_points
+/proc/is_gangster(var/mob/living/M)
+ return istype(M) && M.mind && M.mind.gang_datum
+
+/proc/is_in_gang(var/mob/living/M, var/gang_type = "")
+ if(!is_gangster(M) || !(gang_type in gang_name_pool))
+ return 0
+ var/datum/gang/G = M.mind.gang_datum
+ world << G.name
+ if(G.name == gang_type)
+ return 1
+ return 0
/datum/game_mode/gang
name = "gang war"
diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm
index 45f93dc03da..eb7652cb0a0 100644
--- a/code/game/objects/items/weapons/pneumaticCannon.dm
+++ b/code/game/objects/items/weapons/pneumaticCannon.dm
@@ -73,6 +73,9 @@
/obj/item/weapon/pneumatic_cannon/afterattack(atom/target as mob|obj|turf, mob/living/carbon/human/user as mob|obj, flag, params)
if(user.a_intent == "harm" || !ishuman(user))
return ..()
+ if(is_in_gang(user, "Sleeping Carp"))
+ user << "Use of ranged weaponry would bring dishonor to the clan."
+ return
if(!loadedItems || !loadedWeightClass)
user << "\The [src] has nothing loaded."
return
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 02729e68ac9..11d3de6dac0 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -168,6 +168,11 @@
if(NOGUNS in user.dna.species.specflags)
user << "Your fingers don't fit in the trigger guard!"
return 0
+
+ if(is_in_gang(user, "Sleeping Carp")) //great dishonor to famiry
+ user << "Use of ranged weaponry would bring dishonor to the clan."
+ return 0
+
return 1
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 46f44c40a4a..783f8563101 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -60,6 +60,10 @@
if(!isliving(target))
return 0
var/mob/living/L = target
+ if(is_in_gang(L, "Sleeping Carp")) //Sleeping Carp gang can block projectiles!
+ if(!L.lying) //But only if they aren't lying down
+ L.visible_message("[L] deflects [src]!", "You deflect [src]!")
+ return 1
if(blocked != 100) // not completely blocked
var/organ_hit_text = ""
if(L.has_limbs)