diff --git a/code/datums/martial.dm b/code/datums/martial.dm
index 07355929572..4760e822c25 100644
--- a/code/datums/martial.dm
+++ b/code/datums/martial.dm
@@ -17,6 +17,9 @@
/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
@@ -80,406 +83,6 @@
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
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..3ba8d039b45
--- /dev/null
+++ b/code/game/objects/items/weapons/implants/implant_krav_maga.dm
@@ -0,0 +1,38 @@
+/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
+ style.teach(H)
+ qdel(src)
+
+/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..585c4d7aef9
--- /dev/null
+++ b/code/modules/Martial Arts/adminfu.dm
@@ -0,0 +1,97 @@
+///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.")
+
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..e28a79c316b
--- /dev/null
+++ b/code/modules/Martial Arts/krav_maga.dm
@@ -0,0 +1,162 @@
+/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()
+ 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()
+ 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()
+ 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)
+ ..()
+ H << "You know the arts of Krav Maga!"
+ 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)
+ ..()
+ 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(4)//originally was 6, lowered since you could kill somebody in one stun
+ 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/krav_maga
+ desc = "These gloves can teach you to perform Krav Maga using nanochips."
+ name = "black gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ var/datum/martial_art/krav_maga/style = new
+
+/obj/item/clothing/gloves/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/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)
\ 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..e69de29bb2d
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 5d27605b13c..5ebda5b96d7 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_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index afbe24be5ac..f68b03ed964 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/paradise.dme b/paradise.dme
index deaf7fd35f4..9eb3ec350a1 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -826,6 +826,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"
@@ -1335,6 +1336,13 @@
#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\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"