diff --git a/code/datums/martial.dm b/code/datums/martial.dm
deleted file mode 100644
index 07355929572..00000000000
--- a/code/datums/martial.dm
+++ /dev/null
@@ -1,643 +0,0 @@
-/datum/martial_art
- var/name = "Martial Art"
- var/streak = ""
- var/max_streak_length = 6
- var/current_target = null
- var/temporary = 0
- var/datum/martial_art/base = null // The permanent style
- var/deflection_chance = 0 //Chance to deflect projectiles
- var/help_verb = null
-
-/datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- return 0
-
-/datum/martial_art/proc/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- return 0
-
-/datum/martial_art/proc/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- return 0
-
-/datum/martial_art/proc/add_to_streak(var/element,var/mob/living/carbon/human/D)
- if(D != current_target)
- current_target = D
- streak = ""
- streak = streak+element
- if(length(streak) > max_streak_length)
- streak = copytext(streak,2)
- return
-
-/datum/martial_art/proc/basic_hit(var/mob/living/carbon/human/A,var/mob/living/carbon/human/D)
-
- A.do_attack_animation(D)
- var/damage = rand(A.species.punchdamagelow, A.species.punchdamagehigh)
- var/datum/unarmed_attack/attack = A.species.unarmed
-
- var/atk_verb = "[pick(attack.attack_verb)]"
- if(D.lying)
- atk_verb = "kick"
-
- if(!damage)
- playsound(D.loc, attack.miss_sound, 25, 1, -1)
- D.visible_message("[A] has attempted to [atk_verb] [D]!")
- return 0
-
- var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
- var/armor_block = D.run_armor_check(affecting, "melee")
-
- playsound(D.loc, attack.attack_sound, 25, 1, -1)
- D.visible_message("[A] has [atk_verb]ed [D]!", \
- "[A] has [atk_verb]ed [D]!")
-
- D.apply_damage(damage, BRUTE, affecting, armor_block)
-
- add_logs(D, A, "punched")
-
- if((D.stat != DEAD) && damage >= A.species.punchstunthreshold)
- D.visible_message("[A] has weakened [D]!!", \
- "[A] has weakened [D]!")
- D.apply_effect(4, WEAKEN, armor_block)
- D.forcesay(hit_appends)
- else if(D.lying)
- D.forcesay(hit_appends)
- return 1
-
-/datum/martial_art/proc/teach(var/mob/living/carbon/human/H,var/make_temporary=0)
- if(help_verb)
- H.verbs += help_verb
- if(make_temporary)
- temporary = 1
- if(temporary)
- if(H.martial_art)
- base = H.martial_art.base
- else
- base = src
- H.martial_art = src
-
-/datum/martial_art/proc/remove(var/mob/living/carbon/human/H)
- if(H.martial_art != src)
- return
- H.martial_art = base
- if(help_verb)
- H.verbs -= help_verb
-
-/datum/martial_art/boxing
- name = "Boxing"
-
-/datum/martial_art/boxing/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- to_chat(A, "Can't disarm while boxing!")
- return 1
-
-/datum/martial_art/boxing/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- to_chat(A, "Can't grab while boxing!")
- return 1
-
-/datum/martial_art/boxing/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
-
- A.do_attack_animation(D)
-
- var/atk_verb = pick("left hook","right hook","straight punch")
-
- var/damage = rand(5, 8) + A.species.punchdamagelow
- if(!damage)
- playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- D.visible_message("[A] has attempted to hit [D] with a [atk_verb]!")
- add_logs(D, A, "attempted to hit", atk_verb)
- return 0
-
-
- var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
- var/armor_block = D.run_armor_check(affecting, "melee")
-
- playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
-
- D.visible_message("[A] has hit [D] with a [atk_verb]!", \
- "[A] has hit [D] with a [atk_verb]!")
-
- D.apply_damage(damage, STAMINA, affecting, armor_block)
- add_logs(D, A, "punched")
- if(D.getStaminaLoss() > 50)
- var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
- if((D.stat != DEAD) && prob(knockout_prob))
- D.visible_message("[A] has knocked [D] out with a haymaker!", \
- "[A] has knocked [D] out with a haymaker!")
- D.apply_effect(10,WEAKEN,armor_block)
- D.SetSleeping(5)
- D.forcesay(hit_appends)
- else if(D.lying)
- D.forcesay(hit_appends)
- return 1
-
-/datum/martial_art/drunk_brawling
- name = "Drunken Brawling"
-
-/datum/martial_art/drunk_brawling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(prob(70))
- A.visible_message("[A] tries to grab ahold of [D], but fails!", \
- "You fail to grab ahold of [D]!")
- return 1
- D.grabbedby(A,1)
- var/obj/item/weapon/grab/G = A.get_active_hand()
- if(G)
- D.visible_message("[A] grabs ahold of [D] drunkenly!", \
- "[A] grabs ahold of [D] drunkenly!")
- return 1
-
-/datum/martial_art/drunk_brawling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- add_logs(D, A, "punched")
- A.do_attack_animation(D)
-
- var/atk_verb = pick("jab","uppercut","overhand punch","drunken right hook","drunken left hook")
-
- var/damage = rand(0,6)
-
- if(atk_verb == "uppercut")
- if(prob(90))
- damage = 0
- else //10% chance to do a massive amount of damage
- damage = 14
-
- if(prob(50)) //they are drunk, they aren't going to land half of their hits
- damage = 0
-
- if(!damage)
- playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- D.visible_message("[A] has attempted to hit [D] with a [atk_verb]!")
- return 1 //returns 1 so that they actually miss and don't switch to attackhand damage
-
- var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
- var/armor_block = D.run_armor_check(affecting, "melee")
-
- playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
-
-
- D.visible_message("[A] has hit [D] with a [atk_verb]!", \
- "[A] has hit [D] with a [atk_verb]!")
-
- D.apply_damage(damage, BRUTE, null, armor_block)
- D.apply_effect(damage, STAMINA, armor_block)
- if(D.getStaminaLoss() > 50)
- var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
- if((D.stat != DEAD) && prob(knockout_prob))
- D.visible_message("[A] has knocked [D] out with a haymaker!", \
- "[A] has knocked [D] out with a haymaker!")
- D.apply_effect(10,WEAKEN,armor_block)
- D.Paralyse(5)
- D.forcesay(hit_appends)
- else if(D.lying)
- D.forcesay(hit_appends)
- return 1
-
-/datum/martial_art/wrestling
- name = "Wrestling"
- help_verb = /mob/living/carbon/human/proc/wrestling_help
-
-// combo refence since wrestling uses a different format to sleeping carp and plasma fist.
-// Clinch "G"
-// Suplex "GD"
-// Advanced grab "G"
-
-/datum/martial_art/wrestling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- D.grabbedby(A,1)
- var/obj/item/weapon/grab/G = A.get_active_hand()
- if(G && prob(50))
- G.state = GRAB_AGGRESSIVE
- D.visible_message("[A] has [D] in a clinch!", \
- "[A] has [D] in a clinch!")
- else
- D.visible_message("[A] fails to get [D] in a clinch!", \
- "[A] fails to get [D] in a clinch!")
- return 1
-
-
-/datum/martial_art/wrestling/proc/Suplex(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
-
- D.visible_message("[A] suplexes [D]!", \
- "[A] suplexes [D]!")
- D.forceMove(A.loc)
- var/armor_block = D.run_armor_check(null, "melee")
- D.apply_damage(30, BRUTE, null, armor_block)
- D.apply_effect(6, WEAKEN, armor_block)
- add_logs(D, A, "suplexed")
-
- A.SpinAnimation(10,1)
-
- D.SpinAnimation(10,1)
- spawn(3)
- armor_block = A.run_armor_check(null, "melee")
- A.apply_effect(4, WEAKEN, armor_block)
- return
-
-/datum/martial_art/wrestling/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(istype(A.get_inactive_hand(),/obj/item/weapon/grab))
- var/obj/item/weapon/grab/G = A.get_inactive_hand()
- if(G.affecting == D)
- Suplex(A,D)
- return 1
- harm_act(A,D)
- return 1
-
-/datum/martial_art/wrestling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- D.grabbedby(A,1)
- D.visible_message("[A] holds [D] down!", \
- "[A] holds [D] down!")
- var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
- var/armor_block = D.run_armor_check(affecting, "melee")
- D.apply_damage(10, STAMINA, affecting, armor_block)
- return 1
-
-/mob/living/carbon/human/proc/wrestling_help()
- set name = "Recall Teachings"
- set desc = "Remember how to wrestle."
- set category = "Wrestling"
-
- to_chat(usr, "You flex your muscles and have a revelation...")
- to_chat(usr, "Clinch: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.")
- to_chat(usr, "Suplex: Disarm someone you are grabbing. Suplexes your target to the floor. Greatly injures them and leaves both you and your target on the floor.")
- to_chat(usr, "Advanced grab: Grab. Passively causes stamina damage when grabbing someone.")
-
-#define TORNADO_COMBO "HHD"
-#define THROWBACK_COMBO "DHD"
-#define PLASMA_COMBO "HDDDH"
-
-/datum/martial_art/plasma_fist
- name = "Plasma Fist"
- help_verb = /mob/living/carbon/human/proc/plasma_fist_help
-
-
-/datum/martial_art/plasma_fist/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(findtext(streak,TORNADO_COMBO))
- streak = ""
- Tornado(A,D)
- return 1
- if(findtext(streak,THROWBACK_COMBO))
- streak = ""
- Throwback(A,D)
- return 1
- if(findtext(streak,PLASMA_COMBO))
- streak = ""
- Plasma(A,D)
- return 1
- return 0
-
-/datum/martial_art/plasma_fist/proc/Tornado(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.say("TORNADO SWEEP!")
- spawn(0)
- for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
- A.dir = i
- playsound(A.loc, 'sound/weapons/punch1.ogg', 15, 1, -1)
- sleep(1)
- var/obj/effect/proc_holder/spell/aoe_turf/repulse/R = new(null)
- var/list/turfs = list()
- for(var/turf/T in range(1,A))
- turfs.Add(T)
- R.cast(turfs)
- return
-
-/datum/martial_art/plasma_fist/proc/Throwback(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- D.visible_message("[A] has hit [D] with Plasma Punch!", \
- "[A] has hit [D] with Plasma Punch!")
- playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
- var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A)))
- D.throw_at(throw_target, 200, 4,A)
- A.say("HYAH!")
- return
-
-/datum/martial_art/plasma_fist/proc/Plasma(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- A.do_attack_animation(D)
- playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
- A.say("PLASMA FIST!")
- D.visible_message("[A] has hit [D] with THE PLASMA FIST TECHNIQUE!", \
- "[A] has hit [D] with THE PLASMA FIST TECHNIQUE!")
- D.gib()
- return
-
-/datum/martial_art/plasma_fist/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- add_to_streak("H",D)
- if(check_streak(A,D))
- return 1
- basic_hit(A,D)
- return 1
-
-/datum/martial_art/plasma_fist/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- add_to_streak("D",D)
- if(check_streak(A,D))
- return 1
- basic_hit(A,D)
- return 1
-
-/datum/martial_art/plasma_fist/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- add_to_streak("G",D)
- if(check_streak(A,D))
- return 1
- basic_hit(A,D)
- return 1
-
-/mob/living/carbon/human/proc/plasma_fist_help()
- set name = "Recall Teachings"
- set desc = "Remember the martial techniques of the Plasma Fist."
- set category = "Plasma Fist"
-
- to_chat(usr, "You clench your fists and have a flashback of knowledge...")
- to_chat(usr, "Tornado Sweep: Harm Harm Disarm. Repulses target and everyone back.")
- to_chat(usr, "Throwback: Disarm Harm Disarm. Throws the target and an item at them.")
- to_chat(usr, "The Plasma Fist: Harm Disarm Disarm Disarm Harm. Knocks the brain out of the opponent and gibs their body.")
-
-//Used by the gang of the same name. Uses combos. Basic attacks bypass armor and never miss
-#define WRIST_WRENCH_COMBO "DD"
-#define BACK_KICK_COMBO "HG"
-#define STOMACH_KNEE_COMBO "GH"
-#define HEAD_KICK_COMBO "DHH"
-#define ELBOW_DROP_COMBO "HDHDH"
-/datum/martial_art/the_sleeping_carp
- name = "The Sleeping Carp"
- deflection_chance = 100
- help_verb = /mob/living/carbon/human/proc/sleeping_carp_help
-
-/datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(findtext(streak,WRIST_WRENCH_COMBO))
- streak = ""
- wristWrench(A,D)
- return 1
- if(findtext(streak,BACK_KICK_COMBO))
- streak = ""
- backKick(A,D)
- return 1
- if(findtext(streak,STOMACH_KNEE_COMBO))
- streak = ""
- kneeStomach(A,D)
- return 1
- if(findtext(streak,HEAD_KICK_COMBO))
- streak = ""
- headKick(A,D)
- return 1
- if(findtext(streak,ELBOW_DROP_COMBO))
- streak = ""
- elbowDrop(A,D)
- return 1
- return 0
-
-/datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.stunned && !D.weakened)
- A.do_attack_animation(D)
- D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \
- "[A] grabs your wrist and violently wrenches it to the side!")
- playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- D.emote("scream")
- D.drop_item()
- D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
- D.Stun(3)
- return 1
- return basic_hit(A,D)
-
-/datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(A.dir == D.dir && !D.stat && !D.weakened)
- A.do_attack_animation(D)
- D.visible_message("[A] kicks [D] in the back!", \
- "[A] kicks you in the back, making you stumble and fall!")
- step_to(D,get_step(D,D.dir),1)
- D.Weaken(4)
- playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
- return 1
- return basic_hit(A,D)
-
-/datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.weakened)
- A.do_attack_animation(D)
- D.visible_message("[A] knees [D] in the stomach!", \
- "[A] winds you with a knee in the stomach!")
- D.audible_message("[D] gags!")
- D.losebreath += 3
- D.Stun(2)
- playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
- return 1
- return basic_hit(A,D)
-
-/datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.weakened)
- A.do_attack_animation(D)
- D.visible_message("[A] kicks [D] in the head!", \
- "[A] kicks you in the jaw!")
- D.apply_damage(20, BRUTE, "head")
- D.drop_item()
- playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
- D.Stun(4)
- return 1
- return basic_hit(A,D)
-
-/datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(D.weakened || D.resting || D.stat)
- A.do_attack_animation(D)
- D.visible_message("[A] elbow drops [D]!", \
- "[A] piledrives you with their elbow!")
- if(D.stat)
- D.death() //FINISH HIM!
- D.apply_damage(50, BRUTE, "chest")
- playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
- return 1
- return basic_hit(A,D)
-
-/datum/martial_art/the_sleeping_carp/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- add_to_streak("G",D)
- if(check_streak(A,D))
- return 1
- D.grabbedby(A,1)
- var/obj/item/weapon/grab/G = A.get_active_hand()
- if(G)
- G.state = GRAB_AGGRESSIVE //Instant aggressive grab
-
-/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
- add_to_streak("H",D)
- if(check_streak(A,D))
- return 1
- A.do_attack_animation(D)
- 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', 25, 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
-
-
-/datum/martial_art/the_sleeping_carp/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- add_to_streak("D",D)
- if(check_streak(A,D))
- return 1
- return ..()
-
-/mob/living/carbon/human/proc/sleeping_carp_help()
- set name = "Recall Teachings"
- set desc = "Remember the martial techniques of the Sleeping Carp clan."
- set category = "Sleeping Carp"
-
- to_chat(usr, "You retreat inward and recall the teachings of the Sleeping Carp...")
-
- to_chat(usr, "Wrist Wrench: Disarm Disarm. Forces opponent to drop item in hand.")
- to_chat(usr, "Back Kick: Harm Grab. Opponent must be facing away. Knocks down.")
- to_chat(usr, "Stomach Knee: Grab Harm. Knocks the wind out of opponent and stuns.")
- to_chat(usr, "Head Kick: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand.")
- to_chat(usr, "Elbow Drop: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition.")
-
-//ITEMS
-
-/obj/item/clothing/gloves/boxing
- var/datum/martial_art/boxing/style = new
-
-/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- if(slot == slot_gloves)
- var/mob/living/carbon/human/H = user
- style.teach(H,1)
- return
-
-/obj/item/clothing/gloves/boxing/dropped(mob/user)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(slot_gloves) == src)
- style.remove(H)
- return
-
-/obj/item/weapon/storage/belt/champion/wrestling
- name = "Wrestling Belt"
- var/datum/martial_art/wrestling/style = new
-
-/obj/item/weapon/storage/belt/champion/wrestling/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- if(slot == slot_belt)
- var/mob/living/carbon/human/H = user
- style.teach(H,1)
- to_chat(user, "You have an urge to flex your muscles and get into a fight. You have the knowledge of a thousand wrestlers before you. You can remember more by using the Recall teaching verb in the wrestling tab.")
- return
-
-/obj/item/weapon/storage/belt/champion/wrestling/dropped(mob/user)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(slot_belt) == src)
- style.remove(H)
- to_chat(user, "You no longer have an urge to flex your muscles.")
- return
-
-/obj/item/weapon/plasma_fist_scroll
- name = "frayed scroll"
- desc = "An aged and frayed scrap of paper written in shifting runes. There are hand-drawn illustrations of pugilism."
- icon = 'icons/obj/wizard.dmi'
- icon_state ="scroll2"
- var/used = 0
-
-/obj/item/weapon/plasma_fist_scroll/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- if(!used)
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/plasma_fist/F = new/datum/martial_art/plasma_fist(null)
- F.teach(H)
- to_chat(H, "You have learned the ancient martial art of Plasma Fist.")
- used = 1
- desc = "It's completely blank."
- name = "empty scroll"
- icon_state = "blankscroll"
-
-/obj/item/weapon/sleeping_carp_scroll
- name = "mysterious scroll"
- desc = "A scroll filled with strange markings. It seems to be drawings of some sort of martial art."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "scroll2"
-
-/obj/item/weapon/sleeping_carp_scroll/attack_self(mob/living/carbon/human/user as mob)
- if(!istype(user) || !user)
- return
- to_chat(user, "You have learned the ancient martial art of the Sleeping Carp! \
- Your hand-to-hand combat has become much more effective, and you are now able to deflect any projectiles directed toward you. \
- However, you are also unable to use any ranged weaponry. \
- You can learn more about your newfound art by using the Recall Teachings verb in the Sleeping Carp tab.")
-
-
- var/datum/martial_art/the_sleeping_carp/theSleepingCarp = new(null)
- theSleepingCarp.teach(user)
- user.drop_item()
- visible_message("[src] lights up in fire and quickly burns to ash.")
- new /obj/effect/decal/cleanable/ash(get_turf(src))
- qdel(src)
-
-/obj/item/weapon/twohanded/bostaff
- name = "bo staff"
- desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate."
- force = 10
- w_class = 4
- slot_flags = SLOT_BACK
- force_unwielded = 10
- force_wielded = 24
- throwforce = 20
- throw_speed = 2
- attack_verb = list("smashed", "slammed", "whacked", "thwacked")
- icon = 'icons/obj/weapons.dmi'
- icon_state = "bostaff0"
-
-
-/obj/item/weapon/twohanded/bostaff/update_icon()
- icon_state = "bostaff[wielded]"
- return
-
-/obj/item/weapon/twohanded/bostaff/attack(mob/target, mob/living/user)
- add_fingerprint(user)
- if((CLUMSY in user.disabilities) && prob(50))
- to_chat(user, "You club yourself over the head with [src].")
- user.Weaken(3)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- H.apply_damage(2*force, BRUTE, "head")
- else
- user.take_organ_damage(2*force)
- return
- if(isrobot(target))
- return ..()
- if(!isliving(target))
- return ..()
- var/mob/living/carbon/C = target
- if(C.stat)
- to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.")
- return
- switch(user.a_intent)
- if("disarm")
- if(!wielded)
- return ..()
- if(!ishuman(target))
- return ..()
- var/mob/living/carbon/human/H = target
- var/list/fluffmessages = list("[user] clubs [H] with [src]!", \
- "[user] smacks [H] with the butt of [src]!", \
- "[user] broadsides [H] with [src]!", \
- "[user] smashes [H]'s head with [src]!", \
- "[user] beats [H] with front of [src]!", \
- "[user] twirls and slams [H] with [src]!")
- H.visible_message("[pick(fluffmessages)]", \
- "[pick(fluffmessages)]")
- playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1)
- H.adjustStaminaLoss(rand(13,20))
- if(prob(10))
- H.visible_message("[H] collapses!", \
- "Your legs give out!")
- H.Weaken(4)
- if(H.staminaloss && !H.sleeping)
- var/total_health = (H.health - H.staminaloss)
- if(total_health <= config.health_threshold_crit && !H.stat)
- H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \
- "[user] knocks you unconscious!")
- H.SetSleeping(30)
- H.adjustBrainLoss(25)
- return
- else
- return ..()
- return ..()
-
-/obj/item/weapon/twohanded/bostaff/IsShield()
- if(wielded)
- return 1
- else
- return 0
diff --git a/code/game/objects/items/weapons/implants/implant_krav_maga.dm b/code/game/objects/items/weapons/implants/implant_krav_maga.dm
new file mode 100644
index 00000000000..0a742a9f0a9
--- /dev/null
+++ b/code/game/objects/items/weapons/implants/implant_krav_maga.dm
@@ -0,0 +1,40 @@
+/obj/item/weapon/implant/krav_maga
+ name = "krav maga implant"
+ desc = "Teaches you the arts of Krav Maga in 5 short instructional videos beamed directly into your eyeballs."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state ="scroll2"
+ activated = 1
+ origin_tech = "materials=2;biotech=4;combat=5;syndicate=4"
+ var/datum/martial_art/krav_maga/style = new
+
+/obj/item/weapon/implant/krav_maga/get_data()
+ var/dat = {"Implant Specifications:
+ Name: Krav Maga Implant
+ Life: 4 hours after death of host
+ Implant Details:
+ Function: Teaches even the clumsiest host the arts of Krav Maga."}
+ return dat
+
+/obj/item/weapon/implant/krav_maga/activate()
+ var/mob/living/carbon/human/H = imp_in
+ if(!ishuman(H))
+ return
+ if(istype(H.martial_art, /datum/martial_art/krav_maga))
+ style.remove(H)
+ else
+ style.teach(H,1)
+
+/obj/item/weapon/implanter/krav_maga
+ name = "implanter (krav maga)"
+
+/obj/item/weapon/implanter/krav_maga/New()
+ imp = new /obj/item/weapon/implant/krav_maga(src)
+ ..()
+
+/obj/item/weapon/implantcase/krav_maga
+ name = "implant case - 'Krav Maga'"
+ desc = "A glass case containing an implant that can teach the user the art of Krav Maga."
+
+/obj/item/weapon/implantcase/krav_maga/New()
+ imp = new /obj/item/weapon/implant/krav_maga(src)
+ ..()
\ No newline at end of file
diff --git a/code/modules/martial_arts/adminfu.dm b/code/modules/martial_arts/adminfu.dm
new file mode 100644
index 00000000000..6f8df44f53f
--- /dev/null
+++ b/code/modules/martial_arts/adminfu.dm
@@ -0,0 +1,117 @@
+///Adminfu
+//Help act:Heal/revie GP //p is for help
+//Disarm:Stun
+//Grab:Neck
+//Harm:Gib
+#define HEAL_COMBO "GP"
+
+/datum/martial_art/adminfu
+ name = "Way of the Dancing Admin"
+ help_verb = /mob/living/carbon/human/proc/adminfu_help
+
+/datum/martial_art/adminfu/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(findtext(streak,HEAL_COMBO))
+ streak = ""
+ healPalm(A,D)
+ return 1
+ return 0
+
+/datum/martial_art/adminfu/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+
+ if(!D.stat)//do not kill what is dead...
+ A.do_attack_animation(D)
+ D.visible_message("[A] manifests a large glowing toolbox and shoves it in [D]'s chest!", \
+ "[A] shoves a mystical toolbox in your chest!")
+ D.death()
+
+ return 1
+
+
+/datum/martial_art/adminfu/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ A.do_attack_animation(D)
+ D.Weaken(25)
+ D.Stun(25)
+ return 1
+
+/datum/martial_art/adminfu/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("G",D)
+ if(check_streak(A,D))
+ return 1
+ D.grabbedby(A,1)
+ var/obj/item/weapon/grab/G = A.get_active_hand()
+ if(G)
+ G.state = GRAB_NECK
+
+/datum/martial_art/adminfu/help_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("P",D)
+ if(check_streak(A,D))
+ return 1
+
+/datum/martial_art/adminfu/proc/healPalm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ A.do_attack_animation(D)
+ D.visible_message("[A] smacks [D] in the forehead!")
+
+ //its the staff of healing code..hush
+ if(istype(D,/mob))
+ var/old_stat = D.stat
+ if(isanimal(D) && D.stat == DEAD)
+ var/mob/living/simple_animal/O = D
+ var/mob/living/simple_animal/P = new O.type(O.loc)
+ P.real_name = O.real_name
+ P.name = O.name
+ if(iscorgi(O))
+ var/mob/living/simple_animal/pet/corgi/C = O
+ if(C.inventory_head)
+ C.inventory_head.loc = C.loc
+ if(C.inventory_back)
+ C.inventory_back.loc = C.loc
+ if(O.mind)
+ O.mind.transfer_to(P)
+ else
+ P.key = O.key
+ qdel(O)
+ D = P
+ else
+ D.revive()
+ D.suiciding = 0
+ if(!D.ckey)
+ for(var/mob/dead/observer/ghost in player_list)
+ if(D.real_name == ghost.real_name)
+ ghost.reenter_corpse()
+ break
+ if(old_stat != DEAD)
+ to_chat(D, "You feel great!")
+ else
+ to_chat(D, "You rise with a start, you're alive!!!")
+ return 1
+
+/mob/living/carbon/human/proc/adminfu_help()
+ set name = "Recall Teachings"
+ set desc = "Remember the way of the dancing admin."
+ set category = "Adminfu"
+
+ to_chat(usr, "Grab: Automatic Neck Grab.")
+ to_chat(usr, "Disarm: Stun/weaken")
+ to_chat(usr, "Harm: Death.")
+ to_chat(usr, "Healing Palm::Combo:Grab,Help intent. Heals or revives a crature.")
+
+
+/obj/item/weapon/adminfu_scroll
+ name = "frayed scroll"
+ desc = "An aged and frayed scrap of paper written in shifting runes. There are hand-drawn illustrations of pugilism."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state ="scroll2"
+ var/used = 0
+
+/obj/item/weapon/adminfu_scroll/attack_self(mob/user as mob)
+ if(!ishuman(user))
+ return
+ if(!used)
+ var/mob/living/carbon/human/H = user
+ var/datum/martial_art/adminfu/F = new/datum/martial_art/adminfu(null)
+ F.teach(H)
+ to_chat(H, "You have learned the ancient martial art of the Admins.")
+ used = 1
+ desc = "It's completely blank."
+ name = "empty scroll"
+ icon_state = "blankscroll"
diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm
new file mode 100644
index 00000000000..06bd174a0e2
--- /dev/null
+++ b/code/modules/martial_arts/brawling.dm
@@ -0,0 +1,106 @@
+/datum/martial_art/boxing
+ name = "Boxing"
+
+/datum/martial_art/boxing/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ to_chat(A, "Can't disarm while boxing!")
+ return 1
+
+/datum/martial_art/boxing/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ to_chat(A, "Can't grab while boxing!")
+ return 1
+
+/datum/martial_art/boxing/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+
+ A.do_attack_animation(D)
+
+ var/atk_verb = pick("left hook","right hook","straight punch")
+
+ var/damage = rand(5, 8) + A.species.punchdamagelow
+ if(!damage)
+ playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ D.visible_message("[A] has attempted to hit [D] with a [atk_verb]!")
+ add_logs(D, A, "attempted to hit", atk_verb)
+ return 0
+
+
+ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
+ var/armor_block = D.run_armor_check(affecting, "melee")
+
+ playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
+
+ D.visible_message("[A] has hit [D] with a [atk_verb]!", \
+ "[A] has hit [D] with a [atk_verb]!")
+
+ D.apply_damage(damage, STAMINA, affecting, armor_block)
+ add_logs(D, A, "punched")
+ if(D.getStaminaLoss() > 50)
+ var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
+ if((D.stat != DEAD) && prob(knockout_prob))
+ D.visible_message("[A] has knocked [D] out with a haymaker!", \
+ "[A] has knocked [D] out with a haymaker!")
+ D.apply_effect(10,WEAKEN,armor_block)
+ D.SetSleeping(5)
+ D.forcesay(hit_appends)
+ else if(D.lying)
+ D.forcesay(hit_appends)
+ return 1
+
+/datum/martial_art/drunk_brawling
+ name = "Drunken Brawling"
+
+/datum/martial_art/drunk_brawling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(prob(70))
+ A.visible_message("[A] tries to grab ahold of [D], but fails!", \
+ "You fail to grab ahold of [D]!")
+ return 1
+ D.grabbedby(A,1)
+ var/obj/item/weapon/grab/G = A.get_active_hand()
+ if(G)
+ D.visible_message("[A] grabs ahold of [D] drunkenly!", \
+ "[A] grabs ahold of [D] drunkenly!")
+ return 1
+
+/datum/martial_art/drunk_brawling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_logs(D, A, "punched")
+ A.do_attack_animation(D)
+
+ var/atk_verb = pick("jab","uppercut","overhand punch","drunken right hook","drunken left hook")
+
+ var/damage = rand(0,6)
+
+ if(atk_verb == "uppercut")
+ if(prob(90))
+ damage = 0
+ else //10% chance to do a massive amount of damage
+ damage = 14
+
+ if(prob(50)) //they are drunk, they aren't going to land half of their hits
+ damage = 0
+
+ if(!damage)
+ playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ D.visible_message("[A] has attempted to hit [D] with a [atk_verb]!")
+ return 1 //returns 1 so that they actually miss and don't switch to attackhand damage
+
+ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
+ var/armor_block = D.run_armor_check(affecting, "melee")
+
+ playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
+
+
+ D.visible_message("[A] has hit [D] with a [atk_verb]!", \
+ "[A] has hit [D] with a [atk_verb]!")
+
+ D.apply_damage(damage, BRUTE, null, armor_block)
+ D.apply_effect(damage, STAMINA, armor_block)
+ if(D.getStaminaLoss() > 50)
+ var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
+ if((D.stat != DEAD) && prob(knockout_prob))
+ D.visible_message("[A] has knocked [D] out with a haymaker!", \
+ "[A] has knocked [D] out with a haymaker!")
+ D.apply_effect(10,WEAKEN,armor_block)
+ D.Paralyse(5)
+ D.forcesay(hit_appends)
+ else if(D.lying)
+ D.forcesay(hit_appends)
+ return 1
\ No newline at end of file
diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm
new file mode 100644
index 00000000000..9b589878475
--- /dev/null
+++ b/code/modules/martial_arts/krav_maga.dm
@@ -0,0 +1,173 @@
+/datum/martial_art/krav_maga
+ name = "Krav Maga"
+ var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop()
+ var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep()
+ var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch()
+
+/datum/action/neck_chop
+ name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while."
+ button_icon_state = "neckchop"
+
+/datum/action/neck_chop/Trigger()
+ if(owner.incapacitated())
+ to_chat(owner, "You can't use Krav Maga while you're incapacitated.")
+ return
+ to_chat(owner, "Your next attack will be a Neck Chop.")
+ owner.visible_message("[owner] assumes the Neck Chop stance!")
+ var/mob/living/carbon/human/H = owner
+ H.martial_art.streak = "neck_chop"
+
+/datum/action/leg_sweep
+ name = "Leg Sweep - Trips the victim, rendering them prone and unable to move for a short time."
+ button_icon_state = "legsweep"
+
+/datum/action/leg_sweep/Trigger()
+ if(owner.incapacitated())
+ to_chat(owner, "You can't use Krav Maga while you're incapacitated.")
+ return
+ to_chat(owner, "Your next attack will be a Leg Sweep.")
+ owner.visible_message("[owner] assumes the Leg Sweep stance!")
+ var/mob/living/carbon/human/H = owner
+ H.martial_art.streak = "leg_sweep"
+
+/datum/action/lung_punch//referred to internally as 'quick choke'
+ name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time."
+ button_icon_state = "lungpunch"
+
+/datum/action/lung_punch/Trigger()
+ if(owner.incapacitated())
+ to_chat(owner, "You can't use Krav Maga while you're incapacitated.")
+ return
+ to_chat(owner, "Your next attack will be a Lung Punch.")
+ owner.visible_message("[owner] assumes the Lung Punch stance!")
+ var/mob/living/carbon/human/H = owner
+ H.martial_art.streak = "quick_choke"//internal name for lung punch
+
+/datum/martial_art/krav_maga/teach(var/mob/living/carbon/human/H,var/make_temporary=0)
+ ..()
+ to_chat(H, "You know the arts of Krav Maga!")
+ to_chat(H, "Place your cursor over a move at the top of the screen to see what it does.")
+ neckchop.Grant(H)
+ legsweep.Grant(H)
+ lungpunch.Grant(H)
+
+/datum/martial_art/krav_maga/remove(var/mob/living/carbon/human/H)
+ ..()
+ to_chat(H, "You suddenly forget the arts of Krav Maga...")
+ neckchop.Remove(H)
+ legsweep.Remove(H)
+ lungpunch.Remove(H)
+
+/datum/martial_art/krav_maga/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ switch(streak)
+ if("neck_chop")
+ streak = ""
+ neck_chop(A,D)
+ return 1
+ if("leg_sweep")
+ streak = ""
+ leg_sweep(A,D)
+ return 1
+ if("quick_choke")//is actually lung punch
+ streak = ""
+ quick_choke(A,D)
+ return 1
+ return 0
+
+/datum/martial_art/krav_maga/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(D.stat || D.weakened)
+ return 0
+ D.visible_message("[A] leg sweeps [D]!", \
+ "[A] leg sweeps you!")
+ playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
+ D.apply_damage(5, BRUTE)
+ D.Weaken(2)
+ return 1
+
+/datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
+ D.visible_message("[A] pounds [D] on the chest!", \
+ "[A] slams your chest! You can't breathe!")
+ playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
+ D.losebreath += 5
+ D.adjustOxyLoss(10)
+ return 1
+
+/datum/martial_art/krav_maga/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ D.visible_message("[A] karate chops [D]'s neck!", \
+ "[A] karate chops your neck, rendering you unable to speak for a short time!")
+ playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
+ D.apply_damage(5, BRUTE)
+ D.silent += 10
+ return 1
+
+datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(check_streak(A,D))
+ return 1
+ ..()
+
+/datum/martial_art/krav_maga/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(check_streak(A,D))
+ return 1
+ add_logs(A, D, "punched")
+ A.do_attack_animation(D)
+ var/picked_hit_type = pick("punches", "kicks")
+ var/bonus_damage = 10
+ if(D.weakened || D.resting || D.lying)
+ bonus_damage += 5
+ picked_hit_type = "stomps on"
+ D.apply_damage(bonus_damage, BRUTE)
+ if(picked_hit_type == "kicks" || picked_hit_type == "stomps")
+ playsound(get_turf(D), 'sound/effects/hit_kick.ogg', 50, 1, -1)
+ else
+ playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, 1, -1)
+ D.visible_message("[A] [picked_hit_type] [D]!", \
+ "[A] [picked_hit_type] you!")
+ return 1
+
+/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(check_streak(A,D))
+ return 1
+ if(prob(60))
+ if(D.hand)
+ if(istype(D.l_hand, /obj/item))
+ var/obj/item/I = D.l_hand
+ D.drop_item()
+ A.put_in_hands(I)
+ else
+ if(istype(D.r_hand, /obj/item))
+ var/obj/item/I = D.r_hand
+ D.drop_item()
+ A.put_in_hands(I)
+ D.visible_message("[A] has disarmed [D]!", \
+ "[A] has disarmed [D]!")
+ playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ else
+ D.visible_message("[A] attempted to disarm [D]!", \
+ "[A] attempted to disarm [D]!")
+ playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ return 1
+
+//Krav Maga Gloves
+
+/obj/item/clothing/gloves/color/black/krav_maga
+ var/datum/martial_art/krav_maga/style = new
+
+/obj/item/clothing/gloves/color/black/krav_maga/equipped(mob/user, slot)
+ if(!ishuman(user))
+ return
+ if(slot == slot_gloves)
+ var/mob/living/carbon/human/H = user
+ style.teach(H,1)
+
+/obj/item/clothing/gloves/color/black/krav_maga/dropped(mob/user)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if(H.get_item_by_slot(slot_gloves) == src)
+ style.remove(H)
+
+/obj/item/clothing/gloves/color/black/krav_maga/sec//more obviously named, given to sec
+ name = "krav maga gloves"
+ desc = "These gloves can teach you to perform Krav Maga using nanochips."
+ icon_state = "fightgloves"
+ item_state = "fightgloves"
\ No newline at end of file
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
new file mode 100644
index 00000000000..d128e22c0f6
--- /dev/null
+++ b/code/modules/martial_arts/martial.dm
@@ -0,0 +1,246 @@
+/datum/martial_art
+ var/name = "Martial Art"
+ var/streak = ""
+ var/max_streak_length = 6
+ var/current_target = null
+ var/temporary = 0
+ var/datum/martial_art/base = null // The permanent style
+ var/deflection_chance = 0 //Chance to deflect projectiles
+ var/help_verb = null
+
+/datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ return 0
+
+/datum/martial_art/proc/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ return 0
+
+/datum/martial_art/proc/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ return 0
+
+/datum/martial_art/proc/help_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ return 0
+
+/datum/martial_art/proc/add_to_streak(var/element,var/mob/living/carbon/human/D)
+ if(D != current_target)
+ current_target = D
+ streak = ""
+ streak = streak+element
+ if(length(streak) > max_streak_length)
+ streak = copytext(streak,2)
+ return
+
+/datum/martial_art/proc/basic_hit(var/mob/living/carbon/human/A,var/mob/living/carbon/human/D)
+
+ A.do_attack_animation(D)
+ var/damage = rand(A.species.punchdamagelow, A.species.punchdamagehigh)
+ var/datum/unarmed_attack/attack = A.species.unarmed
+
+ var/atk_verb = "[pick(attack.attack_verb)]"
+ if(D.lying)
+ atk_verb = "kick"
+
+ if(!damage)
+ playsound(D.loc, attack.miss_sound, 25, 1, -1)
+ D.visible_message("[A] has attempted to [atk_verb] [D]!")
+ return 0
+
+ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
+ var/armor_block = D.run_armor_check(affecting, "melee")
+
+ playsound(D.loc, attack.attack_sound, 25, 1, -1)
+ D.visible_message("[A] has [atk_verb]ed [D]!", \
+ "[A] has [atk_verb]ed [D]!")
+
+ D.apply_damage(damage, BRUTE, affecting, armor_block)
+
+ add_logs(D, A, "punched")
+
+ if((D.stat != DEAD) && damage >= A.species.punchstunthreshold)
+ D.visible_message("[A] has weakened [D]!!", \
+ "[A] has weakened [D]!")
+ D.apply_effect(4, WEAKEN, armor_block)
+ D.forcesay(hit_appends)
+ else if(D.lying)
+ D.forcesay(hit_appends)
+ return 1
+
+/datum/martial_art/proc/teach(var/mob/living/carbon/human/H,var/make_temporary=0)
+ if(help_verb)
+ H.verbs += help_verb
+ if(make_temporary)
+ temporary = 1
+ if(temporary)
+ if(H.martial_art)
+ base = H.martial_art.base
+ else
+ base = src
+ H.martial_art = src
+
+/datum/martial_art/proc/remove(var/mob/living/carbon/human/H)
+ if(H.martial_art != src)
+ return
+ H.martial_art = base
+ if(help_verb)
+ H.verbs -= help_verb
+
+//ITEMS
+
+/obj/item/clothing/gloves/boxing
+ var/datum/martial_art/boxing/style = new
+
+/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
+ if(!ishuman(user))
+ return
+ if(slot == slot_gloves)
+ var/mob/living/carbon/human/H = user
+ style.teach(H,1)
+ return
+
+/obj/item/clothing/gloves/boxing/dropped(mob/user)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if(H.get_item_by_slot(slot_gloves) == src)
+ style.remove(H)
+ return
+
+/obj/item/weapon/storage/belt/champion/wrestling
+ name = "Wrestling Belt"
+ var/datum/martial_art/wrestling/style = new
+
+/obj/item/weapon/storage/belt/champion/wrestling/equipped(mob/user, slot)
+ if(!ishuman(user))
+ return
+ if(slot == slot_belt)
+ var/mob/living/carbon/human/H = user
+ style.teach(H,1)
+ to_chat(user, "You have an urge to flex your muscles and get into a fight. You have the knowledge of a thousand wrestlers before you. You can remember more by using the Recall teaching verb in the wrestling tab.")
+ return
+
+/obj/item/weapon/storage/belt/champion/wrestling/dropped(mob/user)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if(H.get_item_by_slot(slot_belt) == src)
+ style.remove(H)
+ to_chat(user, "You no longer have an urge to flex your muscles.")
+ return
+
+/obj/item/weapon/plasma_fist_scroll
+ name = "frayed scroll"
+ desc = "An aged and frayed scrap of paper written in shifting runes. There are hand-drawn illustrations of pugilism."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state ="scroll2"
+ var/used = 0
+
+/obj/item/weapon/plasma_fist_scroll/attack_self(mob/user as mob)
+ if(!ishuman(user))
+ return
+ if(!used)
+ var/mob/living/carbon/human/H = user
+ var/datum/martial_art/plasma_fist/F = new/datum/martial_art/plasma_fist(null)
+ F.teach(H)
+ to_chat(H, "You have learned the ancient martial art of Plasma Fist.")
+ used = 1
+ desc = "It's completely blank."
+ name = "empty scroll"
+ icon_state = "blankscroll"
+
+/obj/item/weapon/sleeping_carp_scroll
+ name = "mysterious scroll"
+ desc = "A scroll filled with strange markings. It seems to be drawings of some sort of martial art."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "scroll2"
+
+/obj/item/weapon/sleeping_carp_scroll/attack_self(mob/living/carbon/human/user as mob)
+ if(!istype(user) || !user)
+ return
+ to_chat(user, "You have learned the ancient martial art of the Sleeping Carp! \
+ Your hand-to-hand combat has become much more effective, and you are now able to deflect any projectiles directed toward you. \
+ However, you are also unable to use any ranged weaponry. \
+ You can learn more about your newfound art by using the Recall Teachings verb in the Sleeping Carp tab.")
+
+
+ var/datum/martial_art/the_sleeping_carp/theSleepingCarp = new(null)
+ theSleepingCarp.teach(user)
+ user.drop_item()
+ visible_message("[src] lights up in fire and quickly burns to ash.")
+ new /obj/effect/decal/cleanable/ash(get_turf(src))
+ qdel(src)
+
+/obj/item/weapon/twohanded/bostaff
+ name = "bo staff"
+ desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate."
+ force = 10
+ w_class = 4
+ slot_flags = SLOT_BACK
+ force_unwielded = 10
+ force_wielded = 24
+ throwforce = 20
+ throw_speed = 2
+ attack_verb = list("smashed", "slammed", "whacked", "thwacked")
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "bostaff0"
+
+
+/obj/item/weapon/twohanded/bostaff/update_icon()
+ icon_state = "bostaff[wielded]"
+ return
+
+/obj/item/weapon/twohanded/bostaff/attack(mob/target, mob/living/user)
+ add_fingerprint(user)
+ if((CLUMSY in user.disabilities) && prob(50))
+ to_chat(user, "You club yourself over the head with [src].")
+ user.Weaken(3)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ H.apply_damage(2*force, BRUTE, "head")
+ else
+ user.take_organ_damage(2*force)
+ return
+ if(isrobot(target))
+ return ..()
+ if(!isliving(target))
+ return ..()
+ var/mob/living/carbon/C = target
+ if(C.stat)
+ to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.")
+ return
+ switch(user.a_intent)
+ if("disarm")
+ if(!wielded)
+ return ..()
+ if(!ishuman(target))
+ return ..()
+ var/mob/living/carbon/human/H = target
+ var/list/fluffmessages = list("[user] clubs [H] with [src]!", \
+ "[user] smacks [H] with the butt of [src]!", \
+ "[user] broadsides [H] with [src]!", \
+ "[user] smashes [H]'s head with [src]!", \
+ "[user] beats [H] with front of [src]!", \
+ "[user] twirls and slams [H] with [src]!")
+ H.visible_message("[pick(fluffmessages)]", \
+ "[pick(fluffmessages)]")
+ playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1)
+ H.adjustStaminaLoss(rand(13,20))
+ if(prob(10))
+ H.visible_message("[H] collapses!", \
+ "Your legs give out!")
+ H.Weaken(4)
+ if(H.staminaloss && !H.sleeping)
+ var/total_health = (H.health - H.staminaloss)
+ if(total_health <= config.health_threshold_crit && !H.stat)
+ H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \
+ "[user] knocks you unconscious!")
+ H.SetSleeping(30)
+ H.adjustBrainLoss(25)
+ return
+ else
+ return ..()
+ return ..()
+
+/obj/item/weapon/twohanded/bostaff/IsShield()
+ if(wielded)
+ return 1
+ else
+ return 0
\ No newline at end of file
diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm
new file mode 100644
index 00000000000..79133de67f0
--- /dev/null
+++ b/code/modules/martial_arts/mimejutsu.dm
@@ -0,0 +1,119 @@
+#define MIMECHUCKS_COMBO "DH"
+#define MIMESMOKE_COMBO "DD"
+#define MIMEPALM_COMBO "GD"
+
+/datum/martial_art/mimejutsu
+ name = "Mimejutsu"
+ help_verb = /mob/living/carbon/human/proc/mimejutsu_help
+
+/datum/martial_art/mimejutsu/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(findtext(streak,MIMECHUCKS_COMBO))
+ streak = ""
+ mimeChuck(A,D)
+ return 1
+ if(findtext(streak,MIMESMOKE_COMBO))
+ streak = ""
+ mimeSmoke(A,D)
+ return 1
+ if(findtext(streak,MIMEPALM_COMBO))
+ streak = ""
+ mimePalm(A,D)
+ return 1
+ return 0
+
+/datum/martial_art/mimejutsu/proc/mimeChuck(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(!D.stat && !D.stunned && !D.weakened)
+ var/damage = rand(5, 8) + A.species.punchdamagelow
+ if(!damage)
+ playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ D.visible_message("[A] swings invisible nunchcuks at [D]..and misses?")
+ return 0
+
+
+ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
+ var/armor_block = D.run_armor_check(affecting, "melee")
+
+ D.visible_message("[A] has hit [D] with invisible nuncucks!", \
+ "[A] has hit [D] with a with invisible nuncuck!")
+ playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+
+ D.apply_damage(damage, STAMINA, affecting, armor_block)
+ add_logs(D, A, "mimechucked")
+
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/mimejutsu/proc/mimeSmoke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+
+ D.visible_message("[A] throws an invisible smoke bomb!!")
+
+ var/datum/effect/system/bad_smoke_spread/smoke = new /datum/effect/system/bad_smoke_spread()
+ smoke.set_up(5, 0, D.loc)
+ smoke.start()
+
+ return basic_hit(A,D)
+
+/datum/martial_art/mimejutsu/proc/mimePalm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(!D.stat && !D.stunned && !D.weakened)
+ D.visible_message("[A] has barely touched [D] with thier palm!", \
+ "[A] hovers thier palm over your face!")
+
+ var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A)))
+ D.throw_at(throw_target, 200, 4,A)
+ return basic_hit(A,D)
+
+
+/datum/martial_art/mimejutsu/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("D",D)
+ if(check_streak(A,D))
+ return 1
+
+ return ..()
+
+/datum/martial_art/mimejutsu/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("G",D)
+ if(check_streak(A,D))
+ return 1
+
+ return 1
+
+/datum/martial_art/mimejutsu/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("H",D)
+ if(check_streak(A,D))
+ return 1
+
+ A.do_attack_animation(D)
+
+ return 1
+
+/obj/item/weapon/mimejutsu_scroll
+ name = "Mimejutsu 'scroll'"
+ desc = "Its a beret with a note stapled to it..."
+ icon = 'icons/obj/clothing/hats.dmi'
+ icon_state = "beret"
+ var/used = 0
+
+/obj/item/weapon/mimejutsu_scroll/attack_self(mob/user as mob)
+ if(!ishuman(user))
+ return
+ if(!used)
+ var/mob/living/carbon/human/H = user
+ var/datum/martial_art/mimejutsu/F = new/datum/martial_art/mimejutsu(null)
+ F.teach(H)
+ to_chat(H, "You have learned the ancient martial art of mimes.")
+ used = 1
+ desc = "It used to have something stapled to it..the staple is still there."
+ name = "beret with staple"
+ icon_state = "beret"
+
+/mob/living/carbon/human/proc/mimejutsu_help()
+ set name = "Recall Ancient Mimeing"
+ set desc = "Remember the martial techniques of Mimejutsu."
+ set category = "Mimejutsu"
+
+ to_chat(usr, "You make a invisible box around yourself and recall the teachings of Mimejutsu...")
+
+ to_chat(usr, "Mimechucks: Disarm Harm. Hits the opponent with invisible nunchucks.")
+ to_chat(usr, "Smokebomb: Disarm Disarm. Drops a mime smokebomb.")
+ to_chat(usr, "Silent Palm: Grab Disarm. Using mime energy throw someone back.")
+
diff --git a/code/modules/martial_arts/plasma_fist.dm b/code/modules/martial_arts/plasma_fist.dm
new file mode 100644
index 00000000000..d2e047dc08d
--- /dev/null
+++ b/code/modules/martial_arts/plasma_fist.dm
@@ -0,0 +1,86 @@
+#define TORNADO_COMBO "HHD"
+#define THROWBACK_COMBO "DHD"
+#define PLASMA_COMBO "HDDDH"
+
+/datum/martial_art/plasma_fist
+ name = "Plasma Fist"
+ help_verb = /mob/living/carbon/human/proc/plasma_fist_help
+
+
+/datum/martial_art/plasma_fist/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(findtext(streak,TORNADO_COMBO))
+ streak = ""
+ Tornado(A,D)
+ return 1
+ if(findtext(streak,THROWBACK_COMBO))
+ streak = ""
+ Throwback(A,D)
+ return 1
+ if(findtext(streak,PLASMA_COMBO))
+ streak = ""
+ Plasma(A,D)
+ return 1
+ return 0
+
+/datum/martial_art/plasma_fist/proc/Tornado(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ A.say("TORNADO SWEEP!")
+ spawn(0)
+ for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
+ A.dir = i
+ playsound(A.loc, 'sound/weapons/punch1.ogg', 15, 1, -1)
+ sleep(1)
+ var/obj/effect/proc_holder/spell/aoe_turf/repulse/R = new(null)
+ var/list/turfs = list()
+ for(var/turf/T in range(1,A))
+ turfs.Add(T)
+ R.cast(turfs)
+ return
+
+/datum/martial_art/plasma_fist/proc/Throwback(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ D.visible_message("[A] has hit [D] with Plasma Punch!", \
+ "[A] has hit [D] with Plasma Punch!")
+ playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
+ var/atom/throw_target = get_edge_target_turf(D, get_dir(D, get_step_away(D, A)))
+ D.throw_at(throw_target, 200, 4,A)
+ A.say("HYAH!")
+ return
+
+/datum/martial_art/plasma_fist/proc/Plasma(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ A.do_attack_animation(D)
+ playsound(D.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
+ A.say("PLASMA FIST!")
+ D.visible_message("[A] has hit [D] with THE PLASMA FIST TECHNIQUE!", \
+ "[A] has hit [D] with THE PLASMA FIST TECHNIQUE!")
+ D.gib()
+ return
+
+/datum/martial_art/plasma_fist/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("H",D)
+ if(check_streak(A,D))
+ return 1
+ basic_hit(A,D)
+ return 1
+
+/datum/martial_art/plasma_fist/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("D",D)
+ if(check_streak(A,D))
+ return 1
+ basic_hit(A,D)
+ return 1
+
+/datum/martial_art/plasma_fist/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("G",D)
+ if(check_streak(A,D))
+ return 1
+ basic_hit(A,D)
+ return 1
+
+/mob/living/carbon/human/proc/plasma_fist_help()
+ set name = "Recall Teachings"
+ set desc = "Remember the martial techniques of the Plasma Fist."
+ set category = "Plasma Fist"
+
+ to_chat(usr, "You clench your fists and have a flashback of knowledge...")
+ to_chat(usr, "Tornado Sweep: Harm Harm Disarm. Repulses target and everyone back.")
+ to_chat(usr, "Throwback: Disarm Harm Disarm. Throws the target and an item at them.")
+ to_chat(usr, "The Plasma Fist: Harm Disarm Disarm Disarm Harm. Knocks the brain out of the opponent and gibs their body.")
\ No newline at end of file
diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm
new file mode 100644
index 00000000000..3202f8fbe27
--- /dev/null
+++ b/code/modules/martial_arts/sleeping_carp.dm
@@ -0,0 +1,137 @@
+//Used by the gang of the same name. Uses combos. Basic attacks bypass armor and never miss
+#define WRIST_WRENCH_COMBO "DD"
+#define BACK_KICK_COMBO "HG"
+#define STOMACH_KNEE_COMBO "GH"
+#define HEAD_KICK_COMBO "DHH"
+#define ELBOW_DROP_COMBO "HDHDH"
+/datum/martial_art/the_sleeping_carp
+ name = "The Sleeping Carp"
+ deflection_chance = 100
+ help_verb = /mob/living/carbon/human/proc/sleeping_carp_help
+
+/datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(findtext(streak,WRIST_WRENCH_COMBO))
+ streak = ""
+ wristWrench(A,D)
+ return 1
+ if(findtext(streak,BACK_KICK_COMBO))
+ streak = ""
+ backKick(A,D)
+ return 1
+ if(findtext(streak,STOMACH_KNEE_COMBO))
+ streak = ""
+ kneeStomach(A,D)
+ return 1
+ if(findtext(streak,HEAD_KICK_COMBO))
+ streak = ""
+ headKick(A,D)
+ return 1
+ if(findtext(streak,ELBOW_DROP_COMBO))
+ streak = ""
+ elbowDrop(A,D)
+ return 1
+ return 0
+
+/datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(!D.stat && !D.stunned && !D.weakened)
+ A.do_attack_animation(D)
+ D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \
+ "[A] grabs your wrist and violently wrenches it to the side!")
+ playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ D.emote("scream")
+ D.drop_item()
+ D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
+ D.Stun(3)
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(A.dir == D.dir && !D.stat && !D.weakened)
+ A.do_attack_animation(D)
+ D.visible_message("[A] kicks [D] in the back!", \
+ "[A] kicks you in the back, making you stumble and fall!")
+ step_to(D,get_step(D,D.dir),1)
+ D.Weaken(4)
+ playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(!D.stat && !D.weakened)
+ A.do_attack_animation(D)
+ D.visible_message("[A] knees [D] in the stomach!", \
+ "[A] winds you with a knee in the stomach!")
+ D.audible_message("[D] gags!")
+ D.losebreath += 3
+ D.Stun(2)
+ playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(!D.stat && !D.weakened)
+ A.do_attack_animation(D)
+ D.visible_message("[A] kicks [D] in the head!", \
+ "[A] kicks you in the jaw!")
+ D.apply_damage(20, BRUTE, "head")
+ D.drop_item()
+ playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ D.Stun(4)
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(D.weakened || D.resting || D.stat)
+ A.do_attack_animation(D)
+ D.visible_message("[A] elbow drops [D]!", \
+ "[A] piledrives you with their elbow!")
+ if(D.stat)
+ D.death() //FINISH HIM!
+ D.apply_damage(50, BRUTE, "chest")
+ playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_sleeping_carp/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("G",D)
+ if(check_streak(A,D))
+ return 1
+ D.grabbedby(A,1)
+ var/obj/item/weapon/grab/G = A.get_active_hand()
+ if(G)
+ G.state = GRAB_AGGRESSIVE //Instant aggressive grab
+
+/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ add_to_streak("H",D)
+ if(check_streak(A,D))
+ return 1
+ A.do_attack_animation(D)
+ 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', 25, 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
+
+
+/datum/martial_art/the_sleeping_carp/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("D",D)
+ if(check_streak(A,D))
+ return 1
+ return ..()
+
+/mob/living/carbon/human/proc/sleeping_carp_help()
+ set name = "Recall Teachings"
+ set desc = "Remember the martial techniques of the Sleeping Carp clan."
+ set category = "Sleeping Carp"
+
+ to_chat(usr, "You retreat inward and recall the teachings of the Sleeping Carp...")
+
+ to_chat(usr, "Wrist Wrench: Disarm Disarm. Forces opponent to drop item in hand.")
+ to_chat(usr, "Back Kick: Harm Grab. Opponent must be facing away. Knocks down.")
+ to_chat(usr, "Stomach Knee: Grab Harm. Knocks the wind out of opponent and stuns.")
+ to_chat(usr, "Head Kick: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand.")
+ to_chat(usr, "Elbow Drop: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition.")
diff --git a/code/modules/martial_arts/wrestleing.dm b/code/modules/martial_arts/wrestleing.dm
new file mode 100644
index 00000000000..d0b3a4e697e
--- /dev/null
+++ b/code/modules/martial_arts/wrestleing.dm
@@ -0,0 +1,67 @@
+/datum/martial_art/wrestling
+ name = "Wrestling"
+ help_verb = /mob/living/carbon/human/proc/wrestling_help
+
+// combo refence since wrestling uses a different format to sleeping carp and plasma fist.
+// Clinch "G"
+// Suplex "GD"
+// Advanced grab "G"
+
+/datum/martial_art/wrestling/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ D.grabbedby(A,1)
+ var/obj/item/weapon/grab/G = A.get_active_hand()
+ if(G && prob(50))
+ G.state = GRAB_AGGRESSIVE
+ D.visible_message("[A] has [D] in a clinch!", \
+ "[A] has [D] in a clinch!")
+ else
+ D.visible_message("[A] fails to get [D] in a clinch!", \
+ "[A] fails to get [D] in a clinch!")
+ return 1
+
+
+/datum/martial_art/wrestling/proc/Suplex(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+
+ D.visible_message("[A] suplexes [D]!", \
+ "[A] suplexes [D]!")
+ D.forceMove(A.loc)
+ var/armor_block = D.run_armor_check(null, "melee")
+ D.apply_damage(30, BRUTE, null, armor_block)
+ D.apply_effect(6, WEAKEN, armor_block)
+ add_logs(D, A, "suplexed")
+
+ A.SpinAnimation(10,1)
+
+ D.SpinAnimation(10,1)
+ spawn(3)
+ armor_block = A.run_armor_check(null, "melee")
+ A.apply_effect(4, WEAKEN, armor_block)
+ return
+
+/datum/martial_art/wrestling/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(istype(A.get_inactive_hand(),/obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = A.get_inactive_hand()
+ if(G.affecting == D)
+ Suplex(A,D)
+ return 1
+ harm_act(A,D)
+ return 1
+
+/datum/martial_art/wrestling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ D.grabbedby(A,1)
+ D.visible_message("[A] holds [D] down!", \
+ "[A] holds [D] down!")
+ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
+ var/armor_block = D.run_armor_check(affecting, "melee")
+ D.apply_damage(10, STAMINA, affecting, armor_block)
+ return 1
+
+/mob/living/carbon/human/proc/wrestling_help()
+ set name = "Recall Teachings"
+ set desc = "Remember how to wrestle."
+ set category = "Wrestling"
+
+ to_chat(usr, "You flex your muscles and have a revelation...")
+ to_chat(usr, "Clinch: Grab. Passively gives you a chance to immediately aggressively grab someone. Not always successful.")
+ to_chat(usr, "Suplex: Disarm someone you are grabbing. Suplexes your target to the floor. Greatly injures them and leaves both you and your target on the floor.")
+ to_chat(usr, "Advanced grab: Grab. Passively causes stamina damage when grabbing someone.")
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index aa187431c63..ee9388ac962 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -37,6 +37,8 @@
prev_gender = gender // Debug for plural genders
make_blood()
+ martial_art = default_martial_art
+
var/mob/M = src
faction |= "\ref[M]" //what
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 25be2232432..33cb567ba4a 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -55,6 +55,8 @@
switch(M.a_intent)
if(I_HELP)
+ if(attacker_style && attacker_style.help_act(H, src))//adminfu only...
+ return 1
if(can_operate(src))
if(health >= config.health_threshold_crit)
if(src.surgeries.len)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 96104fb6862..e2ebed386b3 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,3 +1,4 @@
+var/global/default_martial_art = new/datum/martial_art
/mob/living/carbon/human
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi
index 16d20417d2d..82f08fbb101 100644
Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ
diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi
index a4934926809..d4f0b3ac57a 100644
Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index cf82594e6c6..4a41556989a 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 67af82f6adf..551059d3414 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -189,7 +189,6 @@
#include "code\datums\datumvars.dm"
#include "code\datums\gas_mixture.dm"
#include "code\datums\hud.dm"
-#include "code\datums\martial.dm"
#include "code\datums\material_container.dm"
#include "code\datums\mind.dm"
#include "code\datums\mixed.dm"
@@ -838,6 +837,7 @@
#include "code\game\objects\items\weapons\implants\implant_death_alarm.dm"
#include "code\game\objects\items\weapons\implants\implant_explosive.dm"
#include "code\game\objects\items\weapons\implants\implant_freedom.dm"
+#include "code\game\objects\items\weapons\implants\implant_krav_maga.dm"
#include "code\game\objects\items\weapons\implants\implant_loyality.dm"
#include "code\game\objects\items\weapons\implants\implant_misc.dm"
#include "code\game\objects\items\weapons\implants\implant_storage.dm"
@@ -1349,6 +1349,14 @@
#include "code\modules\logic\dual_input.dm"
#include "code\modules\logic\logic_base.dm"
#include "code\modules\logic\mono_input.dm"
+#include "code\modules\martial_arts\adminfu.dm"
+#include "code\modules\martial_arts\brawling.dm"
+#include "code\modules\martial_arts\krav_maga.dm"
+#include "code\modules\martial_arts\martial.dm"
+#include "code\modules\martial_arts\mimejutsu.dm"
+#include "code\modules\martial_arts\plasma_fist.dm"
+#include "code\modules\martial_arts\sleeping_carp.dm"
+#include "code\modules\martial_arts\wrestleing.dm"
#include "code\modules\media\jukebox.dm"
#include "code\modules\media\machinery.dm"
#include "code\modules\media\mediamanager.dm"
diff --git a/sound/effects/hit_kick.ogg b/sound/effects/hit_kick.ogg
new file mode 100644
index 00000000000..850642de699
Binary files /dev/null and b/sound/effects/hit_kick.ogg differ
diff --git a/sound/effects/hit_punch.ogg b/sound/effects/hit_punch.ogg
new file mode 100644
index 00000000000..e4b38e9627a
Binary files /dev/null and b/sound/effects/hit_punch.ogg differ