diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm
index 4ebfb91092..fe5eac0f07 100644
--- a/code/modules/mob/living/carbon/human/species/species_attack.dm
+++ b/code/modules/mob/living/carbon/human/species/species_attack.dm
@@ -1,87 +1,3 @@
-//Species unarmed attacks
-/datum/unarmed_attack
- var/attack_verb = list("attack") // Empty hand hurt intent verb.
- var/attack_noun = list("fist")
- var/damage = 0 // Extra empty hand attack damage.
- var/attack_sound = "punch"
- var/miss_sound = 'sound/weapons/punchmiss.ogg'
- var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent.
- var/sharp = 0
- var/edge = 0
-
-/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user)
- if(user.restrained())
- return 0
-
- // Check if they have a functioning hand.
- var/datum/organ/external/E = user.organs_by_name["l_hand"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- E = user.organs_by_name["r_hand"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- return 0
-
-/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
-
- var/stun_chance = rand(0, 100)
-
- if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance
- switch(zone) // strong punches can have effects depending on where they hit
- if("head", "mouth", "eyes")
- // Induce blurriness
- target.visible_message("[target] looks dazed.", "You see stars.")
- target.apply_effect(attack_damage*2, EYE_BLUR, armour)
- if("l_arm", "l_hand")
- if (target.l_hand)
- // Disarm left hand
- target.visible_message("[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!")
- target.drop_l_hand()
- if("r_arm", "r_hand")
- if (target.r_hand)
- // Disarm right hand
- target.visible_message("[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!")
- target.drop_r_hand()
- if("chest")
- if(!target.lying)
- var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target)))
- if(!T.density)
- step(target, get_dir(get_turf(user), get_turf(target)))
- target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]")
- else
- target.visible_message("[target] slams into [T]!")
- if(prob(50))
- target.set_dir(reverse_dir[target.dir])
- target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
- if("groin")
- target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]")
- target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
- if("l_leg", "l_foot", "r_leg", "r_foot")
- if(!target.lying)
- target.visible_message("[src] gives way slightly.")
- target.apply_effect(attack_damage*3, AGONY, armour)
- else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance)
- if(!target.lying)
- target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!")
- else
- target.visible_message("[target] has been weakened!")
- target.apply_effect(3, WEAKEN, armour)
-
-/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.display_name]!")
- playsound(user.loc, attack_sound, 25, 1, -1)
-
-/datum/unarmed_attack/bite
- attack_verb = list("bit")
- attack_sound = 'sound/weapons/bite.ogg'
- shredding = 0
- damage = 0
- sharp = 0
- edge = 0
-
/datum/unarmed_attack/bite/sharp //eye teeth
attack_verb = list("bit", "chomped on")
attack_sound = 'sound/weapons/bite.ogg'
@@ -90,120 +6,6 @@
sharp = 1
edge = 1
-/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
- if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
- return 0
- if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth"))
- return 0
- return 1
-
-/datum/unarmed_attack/punch
- attack_verb = list("punched")
- attack_noun = list("fist")
- damage = 0
-
-/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- var/organ = affecting.display_name
-
- attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case.
-
- if(target == user)
- user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!")
- return 0
-
- if(!target.lying)
- switch(zone)
- if("head", "mouth", "eyes")
- // ----- HEAD ----- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] slapped [target] across \his cheek!")
- if(3 to 4) user.visible_message("[user] struck [target] in the head[pick("", " with a closed fist")]!")
- if(5) user.visible_message("[user] gave [target] a resounding slap to the face!")
- if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot")
- // ----- BODY ----- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
- if(5) user.visible_message("[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!")
- else
- user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!")
-
-/datum/unarmed_attack/kick
- attack_verb = list("kicked", "kneed")
- attack_noun = list("kick")
- attack_sound = "swing_hit"
- damage = 1
-
-/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
- if (target.legcuffed)
- return 0
-
- if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin")))
- return 0
-
- var/datum/organ/external/E = user.organs_by_name["l_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- E = user.organs_by_name["r_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- return 0
-
-/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- var/organ = affecting.display_name
-
- attack_damage = Clamp(attack_damage, 1, 5)
-
- switch(zone)
- if("groin", "l_leg", "r_leg")
- // -- LOWER BODY -- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] gave [target] a light [pick(attack_noun)] to the [organ]!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
- if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")
- if("l_foot", "r_foot")
- // ----- FEET ----- //
- switch(attack_damage)
- if(1 to 4) user.visible_message("[user] kicked [target] in \his [organ]!")
- if(5) user.visible_message("[user] stomped down hard on [target]'s [organ]!")
-
-/datum/unarmed_attack/stomp
- attack_verb = null
- attack_noun = list("kick")
- attack_sound = "swing_hit"
- damage = 3
-
-/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
- if (target.legcuffed)
- return 0
-
- if (target.lying && !user.lying)
- var/datum/organ/external/E = user.organs_by_name["l_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- E = user.organs_by_name["r_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- return 0
-
-/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- var/organ = affecting.display_name
-
- attack_damage = Clamp(attack_damage, 1, 5)
-
- switch(attack_damage)
- if(1 to 3)
- user.visible_message("[user] [pick("gave a kick against", "kicked against", "stomped down on", "slammed their foot into")] [target]'s [organ]!")
- if(4 to 5)
- user.visible_message("[user] [pick("landed a strong kick against", "kicked against", "stomped down hard on", "rammed their foot into")] [target]'s [organ]!")
-
/datum/unarmed_attack/diona
attack_verb = list("lashed", "bludgeoned")
attack_noun = list("tendril")
diff --git a/code/modules/mob/living/carbon/human/species_attack.dm b/code/modules/mob/living/carbon/human/species_attack.dm
deleted file mode 100644
index 40783e618d..0000000000
--- a/code/modules/mob/living/carbon/human/species_attack.dm
+++ /dev/null
@@ -1,261 +0,0 @@
-//Species unarmed attacks
-/datum/unarmed_attack
- var/attack_verb = list("attack") // Empty hand hurt intent verb.
- var/attack_noun = list("fist")
- var/damage = 0 // Extra empty hand attack damage.
- var/attack_sound = "punch"
- var/miss_sound = 'sound/weapons/punchmiss.ogg'
- var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent.
- var/sharp = 0
- var/edge = 0
-
-/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user)
- if(user.restrained())
- return 0
-
- // Check if they have a functioning hand.
- var/datum/organ/external/E = user.organs_by_name["l_hand"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- E = user.organs_by_name["r_hand"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- return 0
-
-/datum/unarmed_attack/proc/get_unarmed_damage()
- return damage
-
-/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
-
- var/stun_chance = rand(0, 100)
-
- if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance
- switch(zone) // strong punches can have effects depending on where they hit
- if("head", "mouth", "eyes")
- // Induce blurriness
- target.visible_message("[target] looks dazed.", "You see stars.")
- target.apply_effect(attack_damage*2, EYE_BLUR, armour)
- if("l_arm", "l_hand")
- if (target.l_hand)
- // Disarm left hand
- target.visible_message("[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!")
- target.drop_l_hand()
- if("r_arm", "r_hand")
- if (target.r_hand)
- // Disarm right hand
- target.visible_message("[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!")
- target.drop_r_hand()
- if("chest")
- if(!target.lying)
- var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target)))
- if(!T.density)
- step(target, get_dir(get_turf(user), get_turf(target)))
- target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]")
- else
- target.visible_message("[target] slams into [T]!")
- if(prob(50))
- target.set_dir(reverse_dir[target.dir])
- target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
- if("groin")
- target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]")
- target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
- if("l_leg", "l_foot", "r_leg", "r_foot")
- if(!target.lying)
- target.visible_message("[src] gives way slightly.")
- target.apply_effect(attack_damage*3, AGONY, armour)
- else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance)
- if(!target.lying)
- target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!")
- else
- target.visible_message("[target] has been weakened!")
- target.apply_effect(3, WEAKEN, armour)
-
-/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.display_name]!")
- playsound(user.loc, attack_sound, 25, 1, -1)
-
-/datum/unarmed_attack/bite
- attack_verb = list("bit")
- attack_sound = 'sound/weapons/bite.ogg'
- shredding = 0
- damage = 0
- sharp = 0
- edge = 0
-
-/datum/unarmed_attack/bite/sharp //eye teeth
- attack_verb = list("bit", "chomped on")
- attack_sound = 'sound/weapons/bite.ogg'
- shredding = 0
- damage = 5
- sharp = 1
- edge = 1
-
-/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
- if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
- return 0
- if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth"))
- return 0
- return 1
-
-/datum/unarmed_attack/punch
- attack_verb = list("punched")
- attack_noun = list("fist")
- damage = 0
-
-/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- var/organ = affecting.display_name
-
- attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case.
-
- if(target == user)
- user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!")
- return 0
-
- if(!target.lying)
- switch(zone)
- if("head", "mouth", "eyes")
- // ----- HEAD ----- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] slapped [target] across \his cheek!")
- if(3 to 4) user.visible_message("[user] struck [target] in the head[pick("", " with a closed fist")]!")
- if(5) user.visible_message("[user] gave [target] a resounding slap to the face!")
- if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot")
- // ----- BODY ----- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
- if(5) user.visible_message("[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!")
- else
- user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!")
-
-/datum/unarmed_attack/kick
- attack_verb = list("kicked", "kneed")
- attack_noun = list("kick", "knee strike")
- attack_sound = "swing_hit"
- damage = 0
-
-/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
- if (user.legcuffed)
- return 0
-
- if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin")))
- return 0
-
- var/datum/organ/external/E = user.organs_by_name["l_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- E = user.organs_by_name["r_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- return 0
-
-/datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user)
- var/obj/item/clothing/shoes = user.shoes
- if(!istype(shoes))
- return damage
- return damage + (shoes ? shoes.force : 0)
-
-/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- var/organ = affecting.display_name
-
- attack_damage = Clamp(attack_damage, 1, 5)
-
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] gave [target] a light [pick(attack_noun)] to the [organ]!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
- if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")
-
-/datum/unarmed_attack/stomp
- attack_verb = null
- attack_noun = list("kick")
- attack_sound = "swing_hit"
- damage = 0
-
-/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
- if (user.legcuffed)
- return 0
-
- if (!user.lying && (target.lying || zone in list("l_foot", "r_foot")))
- if(target.grabbed_by == user && target.lying)
- return 0
- var/datum/organ/external/E = user.organs_by_name["l_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- E = user.organs_by_name["r_foot"]
- if(E && !(E.status & ORGAN_DESTROYED))
- return 1
-
- return 0
-
-/datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user)
- var/obj/item/clothing/shoes = user.shoes
- return damage + (shoes ? shoes.force : 0)
-
-/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/datum/organ/external/affecting = target.get_organ(zone)
- var/organ = affecting.display_name
- var/obj/item/clothing/shoes = user.shoes
-
- attack_damage = Clamp(attack_damage, 1, 5)
-
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] [pick("clomped on", "treaded on")] [target]'s [organ]!")
- if(3 to 4) user.visible_message("[user] [pick("stomped down on", "slammed their [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!")
- if(5) user.visible_message("[user] [pick("landed a devastating stomp on", "stomped down hard on", "slammed their [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!")
-
-/datum/unarmed_attack/diona
- attack_verb = list("lashed", "bludgeoned")
- attack_noun = list("tendril")
- damage = 5
-
-/datum/unarmed_attack/claws
- attack_verb = list("scratched", "clawed", "slashed")
- attack_noun = list("claws")
- attack_sound = 'sound/weapons/slice.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- damage = 5
- sharp = 1
- edge = 1
-
-/datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
- var/skill = user.skills["combat"]
- var/datum/organ/external/affecting = target.get_organ(zone)
-
- if(!skill) skill = 1
- attack_damage = Clamp(attack_damage, 1, 5)
-
- if(target == user)
- user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.display_name]!")
- return 0
-
- switch(zone)
- if("head", "mouth", "eyes")
- // ----- HEAD ----- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] scratched [target] across \his cheek!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!")
- if(5) user.visible_message("[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]")
- if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot")
- // ----- BODY ----- //
- switch(attack_damage)
- if(1 to 2) user.visible_message("[user] scratched [target]'s [affecting.display_name]!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!")
- if(5) user.visible_message("[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!")
-
-/datum/unarmed_attack/claws/strong
- attack_verb = list("slash")
- damage = 10
- shredding = 1
-
-/datum/unarmed_attack/bite/strong
- attack_verb = list("maul")
- damage = 15
- shredding = 1
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index e69de29bb2..004225a199 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -0,0 +1,204 @@
+//Species unarmed attacks
+/datum/unarmed_attack
+ var/attack_verb = list("attack") // Empty hand hurt intent verb.
+ var/attack_noun = list("fist")
+ var/damage = 0 // Extra empty hand attack damage.
+ var/attack_sound = "punch"
+ var/miss_sound = 'sound/weapons/punchmiss.ogg'
+ var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent.
+ var/sharp = 0
+ var/edge = 0
+
+/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user)
+ if(user.restrained())
+ return 0
+
+ // Check if they have a functioning hand.
+ var/datum/organ/external/E = user.organs_by_name["l_hand"]
+ if(E && !(E.status & ORGAN_DESTROYED))
+ return 1
+
+ E = user.organs_by_name["r_hand"]
+ if(E && !(E.status & ORGAN_DESTROYED))
+ return 1
+
+ return 0
+
+/datum/unarmed_attack/proc/get_unarmed_damage()
+ return damage
+
+/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
+
+ var/stun_chance = rand(0, 100)
+
+ if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance
+ switch(zone) // strong punches can have effects depending on where they hit
+ if("head", "mouth", "eyes")
+ // Induce blurriness
+ target.visible_message("[target] looks dazed.", "You see stars.")
+ target.apply_effect(attack_damage*2, EYE_BLUR, armour)
+ if("l_arm", "l_hand")
+ if (target.l_hand)
+ // Disarm left hand
+ target.visible_message("[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!")
+ target.drop_l_hand()
+ if("r_arm", "r_hand")
+ if (target.r_hand)
+ // Disarm right hand
+ target.visible_message("[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!")
+ target.drop_r_hand()
+ if("chest")
+ if(!target.lying)
+ var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target)))
+ if(!T.density)
+ step(target, get_dir(get_turf(user), get_turf(target)))
+ target.visible_message("[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]")
+ else
+ target.visible_message("[target] slams into [T]!")
+ if(prob(50))
+ target.set_dir(reverse_dir[target.dir])
+ target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
+ if("groin")
+ target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]")
+ target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
+ if("l_leg", "l_foot", "r_leg", "r_foot")
+ if(!target.lying)
+ target.visible_message("[src] gives way slightly.")
+ target.apply_effect(attack_damage*3, AGONY, armour)
+ else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance)
+ if(!target.lying)
+ target.visible_message("[target] [pick("slumps", "falls", "drops")] down to the ground!")
+ else
+ target.visible_message("[target] has been weakened!")
+ target.apply_effect(3, WEAKEN, armour)
+
+/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
+ var/datum/organ/external/affecting = target.get_organ(zone)
+ user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.display_name]!")
+ playsound(user.loc, attack_sound, 25, 1, -1)
+
+/datum/unarmed_attack/bite
+ attack_verb = list("bit")
+ attack_sound = 'sound/weapons/bite.ogg'
+ shredding = 0
+ damage = 0
+ sharp = 0
+ edge = 0
+
+/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
+ if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
+ return 0
+ if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth"))
+ return 0
+ return 1
+
+/datum/unarmed_attack/punch
+ attack_verb = list("punched")
+ attack_noun = list("fist")
+ damage = 0
+
+/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
+ var/datum/organ/external/affecting = target.get_organ(zone)
+ var/organ = affecting.display_name
+
+ attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case.
+
+ if(target == user)
+ user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!")
+ return 0
+
+ if(!target.lying)
+ switch(zone)
+ if("head", "mouth", "eyes")
+ // ----- HEAD ----- //
+ switch(attack_damage)
+ if(1 to 2) user.visible_message("[user] slapped [target] across \his cheek!")
+ if(3 to 4) user.visible_message("[user] struck [target] in the head[pick("", " with a closed fist")]!")
+ if(5) user.visible_message("[user] gave [target] a resounding slap to the face!")
+ if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot")
+ // ----- BODY ----- //
+ switch(attack_damage)
+ if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!")
+ if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
+ if(5) user.visible_message("[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!")
+ else
+ user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!")
+
+/datum/unarmed_attack/kick
+ attack_verb = list("kicked", "kneed")
+ attack_noun = list("kick", "knee strike")
+ attack_sound = "swing_hit"
+ damage = 0
+
+/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
+ if (user.legcuffed)
+ return 0
+
+ if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin")))
+ return 0
+
+ var/datum/organ/external/E = user.organs_by_name["l_foot"]
+ if(E && !(E.status & ORGAN_DESTROYED))
+ return 1
+
+ E = user.organs_by_name["r_foot"]
+ if(E && !(E.status & ORGAN_DESTROYED))
+ return 1
+
+ return 0
+
+/datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user)
+ var/obj/item/clothing/shoes = user.shoes
+ if(!istype(shoes))
+ return damage
+ return damage + (shoes ? shoes.force : 0)
+
+/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
+ var/datum/organ/external/affecting = target.get_organ(zone)
+ var/organ = affecting.display_name
+
+ attack_damage = Clamp(attack_damage, 1, 5)
+
+ switch(attack_damage)
+ if(1 to 2) user.visible_message("[user] gave [target] a light [pick(attack_noun)] to the [organ]!")
+ if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
+ if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")
+
+/datum/unarmed_attack/stomp
+ attack_verb = null
+ attack_noun = list("kick")
+ attack_sound = "swing_hit"
+ damage = 0
+
+/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
+ if (user.legcuffed)
+ return 0
+
+ if (!user.lying && (target.lying || zone in list("l_foot", "r_foot")))
+ if(target.grabbed_by == user && target.lying)
+ return 0
+ var/datum/organ/external/E = user.organs_by_name["l_foot"]
+ if(E && !(E.status & ORGAN_DESTROYED))
+ return 1
+
+ E = user.organs_by_name["r_foot"]
+ if(E && !(E.status & ORGAN_DESTROYED))
+ return 1
+
+ return 0
+
+/datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user)
+ var/obj/item/clothing/shoes = user.shoes
+ return damage + (shoes ? shoes.force : 0)
+
+/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
+ var/datum/organ/external/affecting = target.get_organ(zone)
+ var/organ = affecting.display_name
+ var/obj/item/clothing/shoes = user.shoes
+
+ attack_damage = Clamp(attack_damage, 1, 5)
+
+ switch(attack_damage)
+ if(1 to 2) user.visible_message("[user] [pick("clomped on", "treaded on")] [target]'s [organ]!")
+ if(3 to 4) user.visible_message("[user] [pick("stomped down on", "slammed their [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!")
+ if(5) user.visible_message("[user] [pick("landed a devastating stomp on", "stomped down hard on", "slammed their [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!")
\ No newline at end of file