diff --git a/code/game/machinery/vendors/departmental_vendors.dm b/code/game/machinery/vendors/departmental_vendors.dm
index 79ad7839a48..34265a6d650 100644
--- a/code/game/machinery/vendors/departmental_vendors.dm
+++ b/code/game/machinery/vendors/departmental_vendors.dm
@@ -218,7 +218,8 @@
/obj/item/storage/box/evidence = 6,
/obj/item/flashlight/seclite = 4,
/obj/item/restraints/legcuffs/bola/energy = 7,
- /obj/item/clothing/mask/muzzle/safety = 4)
+ /obj/item/clothing/mask/muzzle/safety = 4,
+ /obj/item/judobelt = 3)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/fancy/donut_box = 2, /obj/item/hailer = 5)
refill_canister = /obj/item/vending_refill/security
prices = list(/obj/item/reagent_containers/food/snacks/donut = 40,
diff --git a/code/game/objects/items/weapons/batons.dm b/code/game/objects/items/weapons/batons.dm
index 995ff2eff86..99c93f82aa0 100644
--- a/code/game/objects/items/weapons/batons.dm
+++ b/code/game/objects/items/weapons/batons.dm
@@ -66,6 +66,9 @@
* * user - The attacking user
*/
/obj/item/melee/classic_baton/proc/baton_knockdown(mob/living/target, mob/living/user)
+ if(user.mind?.martial_art?.no_baton)
+ to_chat(user, user.mind.martial_art.no_baton_reason)
+ return
if(issilicon(target))
user.visible_message("[user] pulses [target]'s sensors with [src]!",\
"You pulse [target]'s sensors with [src]!")
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 056aea8644e..ab5a5ba5349 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -165,7 +165,9 @@
user.visible_message("[user] accidentally hits [user.p_themselves()] with [src]!",
"You accidentally hit yourself with [src]!")
return
-
+ if(user.mind?.martial_art?.no_baton)
+ to_chat(user, user.mind.martial_art.no_baton_reason)
+ return
if(issilicon(M)) // Can't stunbaton borgs and AIs
return ..()
diff --git a/code/modules/martial_arts/combos/judo/armbar.dm b/code/modules/martial_arts/combos/judo/armbar.dm
new file mode 100644
index 00000000000..79b31497ae4
--- /dev/null
+++ b/code/modules/martial_arts/combos/judo/armbar.dm
@@ -0,0 +1,17 @@
+/datum/martial_combo/judo/armbar
+ name = "Armbar"
+ steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_GRAB)
+ explaination_text = "place an opponent who has been knocked down into an armbar, immobilizing them"
+ combo_text_override = "Disarm, disarm, grab"
+
+/datum/martial_combo/judo/armbar/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA)
+ if(!IS_HORIZONTAL(target) || user.IsKnockedDown())
+ return MARTIAL_COMBO_FAIL
+ target.visible_message("[user] puts [target] into an armbar!", \
+ "[user] wrestles you into an armbar!")
+ playsound(get_turf(user), 'sound/weapons/slashmiss.ogg', 40, TRUE, -1)
+ target.apply_damage(45, STAMINA)
+ target.Immobilize(5 SECONDS)
+ target.KnockDown(5 SECONDS)
+ add_attack_logs(user, target, "Melee attacked with martial-art [src] : Armbar", ATKLOG_ALL)
+ return MARTIAL_COMBO_DONE
diff --git a/code/modules/martial_arts/combos/judo/discombobulate.dm b/code/modules/martial_arts/combos/judo/discombobulate.dm
new file mode 100644
index 00000000000..1b11efedb41
--- /dev/null
+++ b/code/modules/martial_arts/combos/judo/discombobulate.dm
@@ -0,0 +1,14 @@
+/datum/martial_combo/judo/discombobulate
+ name = "Discombobulate"
+ steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_GRAB)
+ explaination_text = "Deliver a palm strike to your opponents ear, briefly confusing them"
+ combo_text_override = "Disarm, Grab"
+
+/datum/martial_combo/judo/discombobulate/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA)
+ target.visible_message("[user] strikes [target] in the head with [user.p_their()] palm!", \
+ "[user] strikes you with [user.p_their()] palm!")
+ playsound(get_turf(user), 'sound/weapons/slap.ogg', 40, TRUE, -1)
+ target.apply_damage(10, STAMINA)
+ target.AdjustConfused(5 SECONDS)
+ add_attack_logs(user, target, "Melee attacked with martial-art [src] : Discombobulate", ATKLOG_ALL)
+ return MARTIAL_COMBO_DONE
diff --git a/code/modules/martial_arts/combos/judo/eyepoke.dm b/code/modules/martial_arts/combos/judo/eyepoke.dm
new file mode 100644
index 00000000000..d495e5af391
--- /dev/null
+++ b/code/modules/martial_arts/combos/judo/eyepoke.dm
@@ -0,0 +1,15 @@
+/datum/martial_combo/judo/eyepoke
+ name = "Eye Poke"
+ steps = list(MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_HARM)
+ explaination_text = "Jab your opponent in the eye, damaging and blinding them breifly. Opponents with eye protection are still affected."
+ combo_text_override = "Disarm, Harm"
+
+/datum/martial_combo/judo/eyepoke/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA)
+ target.visible_message("[user] jabs [target] in [user.p_their()] eyes!", \
+ "[user] jabs you in the eyes!")
+ playsound(get_turf(user), 'sound/weapons/whip.ogg', 40, TRUE, -1)
+ target.apply_damage(10, BRUTE)
+ target.AdjustEyeBlurry(50, 0, 30 SECONDS)
+ target.EyeBlind(2 SECONDS)
+ add_attack_logs(user, target, "Melee attacked with martial-art [src] : Eye Poke", ATKLOG_ALL)
+ return MARTIAL_COMBO_DONE
diff --git a/code/modules/martial_arts/combos/judo/judothrow.dm b/code/modules/martial_arts/combos/judo/judothrow.dm
new file mode 100644
index 00000000000..4939dead2e6
--- /dev/null
+++ b/code/modules/martial_arts/combos/judo/judothrow.dm
@@ -0,0 +1,15 @@
+/datum/martial_combo/judo/judothrow
+ name = "Throw"
+ steps = list(MARTIAL_COMBO_STEP_GRAB, MARTIAL_COMBO_STEP_DISARM)
+ explaination_text = "Establish a gripset on your opponent and throw them to the floor, inflicting stamina damage"
+ combo_text_override = "Grab, Disarm"
+/datum/martial_combo/judo/judothrow/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA)
+ if(user.IsKnockedDown() || IS_HORIZONTAL(target))
+ return MARTIAL_COMBO_FAIL
+ target.visible_message("[user] judo throws [target] to ground!", \
+ "[user] judo throws you to the ground!")
+ playsound(get_turf(user), 'sound/weapons/slam.ogg', 40, TRUE, -1)
+ target.apply_damage(25, STAMINA)
+ target.KnockDown(7 SECONDS)
+ add_attack_logs(user, target, "Melee attacked with martial-art [src] : Judo Throw", ATKLOG_ALL)
+ return MARTIAL_COMBO_DONE
diff --git a/code/modules/martial_arts/combos/judo/wheelthrow.dm b/code/modules/martial_arts/combos/judo/wheelthrow.dm
new file mode 100644
index 00000000000..6759093d136
--- /dev/null
+++ b/code/modules/martial_arts/combos/judo/wheelthrow.dm
@@ -0,0 +1,18 @@
+/datum/martial_combo/judo/wheelthrow
+ name = "Wheel Throw"
+ steps = list(MARTIAL_COMBO_STEP_GRAB, MARTIAL_COMBO_STEP_DISARM, MARTIAL_COMBO_STEP_HARM)
+ explaination_text = "From an armbar, flip your opponent over your shoulder, slamming them onto the floor, leaving them stunned."
+ combo_text_override = "Grab, Disarm, Harm"
+
+/datum/martial_combo/judo/wheelthrow/perform_combo(mob/living/carbon/human/user, mob/living/target, datum/martial_art/MA)
+ if(!IS_HORIZONTAL(target) || !target.IsImmobilized())
+ return MARTIAL_COMBO_FAIL
+ target.visible_message("[user] raises [target] over [user.p_their()] shoulder, and slams [target.p_them()] into the ground!", \
+ "[user] throws you over [user.p_their()] shoulder, slamming you into the ground!")
+ playsound(get_turf(user), 'sound/magic/tail_swing.ogg', 40, TRUE, -1)
+ target.SpinAnimation(10, 1)
+ target.apply_damage(200, STAMINA)
+ target.KnockDown(15 SECONDS)
+ target.SetConfused(10 SECONDS)
+ add_attack_logs(user, target, "Melee attacked with martial-art [src] : Wheel Throw", ATKLOG_ALL)
+ return MARTIAL_COMBO_DONE
diff --git a/code/modules/martial_arts/judo.dm b/code/modules/martial_arts/judo.dm
new file mode 100644
index 00000000000..a1b49e86d8c
--- /dev/null
+++ b/code/modules/martial_arts/judo.dm
@@ -0,0 +1,65 @@
+/datum/martial_art/judo
+ name = "Corporate Judo"
+ has_explaination_verb = TRUE
+ no_baton = TRUE
+ combos = list(/datum/martial_combo/judo/discombobulate, /datum/martial_combo/judo/eyepoke, /datum/martial_combo/judo/judothrow, /datum/martial_combo/judo/armbar, /datum/martial_combo/judo/wheelthrow)
+ weight = 5 //takes priority over boxing and drunkneness, less priority than krav or CQC/carp
+ no_baton_reason = "The baton feels off balance in your hand due to your judo training!"
+
+//Corporate Judo Belt
+
+/obj/item/judobelt
+ name = "\improper Corporate Judo Belt"
+ desc = "Teaches the wearer NT Corporate Judo."
+ icon = 'icons/obj/clothing/belts.dmi'
+ lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
+ icon_state = "judobelt"
+ item_state = "judo"
+ slot_flags = SLOT_BELT
+ w_class = WEIGHT_CLASS_BULKY
+ var/datum/martial_art/judo/style
+
+/obj/item/judobelt/Initialize()
+ . = ..()
+ style = new()
+
+/obj/item/judobelt/equipped(mob/user, slot)
+ if(!ishuman(user))
+ return
+ if(slot == slot_belt)
+ var/mob/living/carbon/human/H = user
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(H, "The arts of Corporate Judo echo uselessly in your head, the thought of violence disgusts you!")
+ return
+ style.teach(H, 1)
+ to_chat(H, "The belt's nanites infuse you with the prowess of a black belt in Corporate Judo!")
+ to_chat(H, "See the martial arts tab for an explanation of combos.")
+ return
+
+/obj/item/judobelt/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 suddenly forget the arts of Corporate Judo...")
+
+//Increased harm damage
+/datum/martial_art/judo/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ MARTIAL_ARTS_ACT_CHECK
+ var/picked_hit_type = pick("chops", "slices", "strikes")
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.apply_damage(7, BRUTE)
+ playsound(get_turf(D), 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
+ D.visible_message("[A] [picked_hit_type] [D]!", \
+ "[A] [picked_hit_type] you!")
+ add_attack_logs(A, D, "Melee attacked with [src]")
+ return TRUE
+
+/datum/martial_art/judo/explaination_header(user)
+ to_chat(user, "You recall the teachings of Corporate Judo.")
+
+/datum/martial_art/cqc/explaination_footer(user)
+ to_chat(user, "Your unarmed strikes hit about twice as hard as your peers, on average.")
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index a34f829b3ea..b23a82911e2 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -33,8 +33,12 @@
var/in_stance = FALSE
/// If the martial art allows parrying.
var/can_parry = FALSE
+ /// Set to TRUE to prevent users of this style from using stun batons (and stunprods)
+ var/no_baton = FALSE
/// The priority of which martial art is picked from all the ones someone knows, the higher the number, the higher the priority.
var/weight = 0
+ /// Message displayed when someone uses a baton when its forbidden by a martial art
+ var/no_baton_reason = "Your martial arts training prevents you from wielding batons."
/datum/martial_art/New()
. = ..()
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index b6af4c1de23..6d2180025c0 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/inhands/equipment/belt_lefthand.dmi b/icons/mob/inhands/equipment/belt_lefthand.dmi
index febcdb854b8..8dd98192add 100644
Binary files a/icons/mob/inhands/equipment/belt_lefthand.dmi and b/icons/mob/inhands/equipment/belt_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/belt_righthand.dmi b/icons/mob/inhands/equipment/belt_righthand.dmi
index d7b394cc09b..bd71f1aea62 100644
Binary files a/icons/mob/inhands/equipment/belt_righthand.dmi and b/icons/mob/inhands/equipment/belt_righthand.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index df3e2f292c7..6cfabb86554 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 26bb79cc001..cd256b5044f 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1843,6 +1843,7 @@
#include "code\modules\martial_arts\plasma_fist.dm"
#include "code\modules\martial_arts\sleeping_carp.dm"
#include "code\modules\martial_arts\wrestling.dm"
+#include "code\modules\martial_arts\judo.dm"
#include "code\modules\martial_arts\combos\martial_combo.dm"
#include "code\modules\martial_arts\combos\adminfu\healing_palm.dm"
#include "code\modules\martial_arts\combos\cqc\consecutive.dm"
@@ -1862,6 +1863,11 @@
#include "code\modules\martial_arts\combos\sleeping_carp\crashing_kick.dm"
#include "code\modules\martial_arts\combos\sleeping_carp\gnashing_teeth.dm"
#include "code\modules\martial_arts\combos\sleeping_carp\keelhaul.dm"
+#include "code\modules\martial_arts\combos\judo\discombobulate.dm"
+#include "code\modules\martial_arts\combos\judo\eyepoke.dm"
+#include "code\modules\martial_arts\combos\judo\judothrow.dm"
+#include "code\modules\martial_arts\combos\judo\armbar.dm"
+#include "code\modules\martial_arts\combos\judo\wheelthrow.dm"
#include "code\modules\maze_generation\maze_generator.dm"
#include "code\modules\maze_generation\maze_generator_blockwise.dm"
#include "code\modules\maze_generation\maze_helper_atoms.dm"