From 0234874f65158bdfd2ccaf884efefc917a79f758 Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Wed, 5 Nov 2025 11:41:41 +1100 Subject: [PATCH] Krav Maga > Kaza Ruk: Tail sweep criminals (#93773) --- _maps/RandomZLevels/caves.dmm | 2 +- code/__DEFINES/melee.dm | 2 +- .../martial/{krav_maga.dm => kaza_ruk.dm} | 178 +++++++++++------- .../items/implants/implant_kaza_ruk.dm | 41 ++++ .../items/implants/implant_krav_maga.dm | 41 ---- code/game/objects/items/storage/garment.dm | 2 +- .../game/objects/items/storage/uplink_kits.dm | 2 +- .../modules/deathmatch/deathmatch_modifier.dm | 2 +- .../modules/uplink/uplink_items/spy_unique.dm | 4 +- tgstation.dme | 4 +- 10 files changed, 161 insertions(+), 117 deletions(-) rename code/datums/martial/{krav_maga.dm => kaza_ruk.dm} (57%) create mode 100644 code/game/objects/items/implants/implant_kaza_ruk.dm delete mode 100644 code/game/objects/items/implants/implant_krav_maga.dm diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 9891aa74685..77d1040d891 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -152,7 +152,7 @@ /area/awaymission/caves/bmp_asteroid/level_four) "ba" = ( /obj/structure/table/wood/fancy, -/obj/item/clothing/gloves/krav_maga/combatglovesplus, +/obj/item/clothing/gloves/kaza_ruk/combatglovesplus, /turf/open/floor/engine/cult, /area/awaymission/caves/bmp_asteroid/level_four) "bf" = ( diff --git a/code/__DEFINES/melee.dm b/code/__DEFINES/melee.dm index c6bfbcddc76..7762381d0e9 100644 --- a/code/__DEFINES/melee.dm +++ b/code/__DEFINES/melee.dm @@ -4,7 +4,7 @@ #define MARTIALART_CQC "CQC" #define MARTIALART_EVIL_BOXING "evil boxing" #define MARTIALART_HUNTER_BOXING "hunter boxing" -#define MARTIALART_KRAVMAGA "krav maga" +#define MARTIALART_KAZA_RUK "Kaza Ruk" #define MARTIALART_MUSHPUNCH "mushroom punch" #define MARTIALART_PLASMAFIST "plasma fist" #define MARTIALART_PSYCHOBRAWL "psychotic brawling" diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/kaza_ruk.dm similarity index 57% rename from code/datums/martial/krav_maga.dm rename to code/datums/martial/kaza_ruk.dm index 1df05ac15ad..c70624369cd 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/kaza_ruk.dm @@ -1,19 +1,29 @@ -/datum/martial_art/krav_maga - name = "Krav Maga" - id = MARTIALART_KRAVMAGA +/datum/martial_art/kaza_ruk + name = "Kaza Ruk" + id = MARTIALART_KAZA_RUK + grab_damage_modifier = 5 + grab_escape_chance_modifier = -10 VAR_PRIVATE/datum/action/neck_chop/neckchop - VAR_PRIVATE/datum/action/leg_sweep/legsweep + VAR_PRIVATE/datum/action/low_sweep/lowsweep VAR_PRIVATE/datum/action/lung_punch/lungpunch -/datum/martial_art/krav_maga/New() +/datum/martial_art/kaza_ruk/activate_style(mob/living/new_holder) + . = ..() + RegisterSignal(new_holder, COMSIG_HUMAN_PUNCHED, PROC_REF(blow_followup)) + +/datum/martial_art/kaza_ruk/deactivate_style(mob/living/old_holder) + . = ..() + UnregisterSignal(old_holder, COMSIG_HUMAN_PUNCHED) + +/datum/martial_art/kaza_ruk/New() . = ..() neckchop = new(src) - legsweep = new(src) + lowsweep = new(src) lungpunch = new(src) -/datum/martial_art/krav_maga/Destroy() +/datum/martial_art/kaza_ruk/Destroy() neckchop = null - legsweep = null + lowsweep = null lungpunch = null return ..() @@ -36,24 +46,24 @@ owner.visible_message(span_danger("[owner] assumes the Neck Chop stance!"), "Your next attack will be a Neck Chop.") source.streak = "neck_chop" -/datum/action/leg_sweep - name = "Leg Sweep" +/datum/action/low_sweep + name = "Low Sweep" desc = "Trips the victim, knocking them down for a brief moment." button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "legsweep" check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS -/datum/action/leg_sweep/Trigger(mob/clicker, trigger_flags) +/datum/action/low_sweep/Trigger(mob/clicker, trigger_flags) . = ..() if(!.) return var/datum/martial_art/source = target - if (source.streak == "leg_sweep") + if (source.streak == "low_sweep") owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.") source.streak = "" else - owner.visible_message(span_danger("[owner] assumes the Leg Sweep stance!"), "Your next attack will be a Leg Sweep.") - source.streak = "leg_sweep" + owner.visible_message(span_danger("[owner] assumes the Low Sweep stance!"), "Your next attack will be a Low Sweep.") + source.streak = "low_sweep" /datum/action/lung_punch//referred to internally as 'quick choke' name = "Lung Punch" @@ -74,30 +84,30 @@ owner.visible_message(span_danger("[owner] assumes the Lung Punch stance!"), "Your next attack will be a Lung Punch.") source.streak = "quick_choke"//internal name for lung punch -/datum/martial_art/krav_maga/activate_style(mob/living/new_holder) +/datum/martial_art/kaza_ruk/activate_style(mob/living/new_holder) . = ..() to_chat(new_holder, span_userdanger("You know the arts of [name]!")) to_chat(new_holder, span_danger("Place your cursor over a move at the top of the screen to see what it does.")) neckchop.Grant(new_holder) - legsweep.Grant(new_holder) + lowsweep.Grant(new_holder) lungpunch.Grant(new_holder) -/datum/martial_art/krav_maga/deactivate_style(mob/living/remove_from) +/datum/martial_art/kaza_ruk/deactivate_style(mob/living/remove_from) to_chat(remove_from, span_userdanger("You suddenly forget the arts of [name]...")) neckchop?.Remove(remove_from) - legsweep?.Remove(remove_from) + lowsweep?.Remove(remove_from) lungpunch?.Remove(remove_from) return ..() -/datum/martial_art/krav_maga/proc/check_streak(mob/living/attacker, mob/living/defender) +/datum/martial_art/kaza_ruk/proc/check_streak(mob/living/attacker, mob/living/defender) switch(streak) if("neck_chop") streak = "" neck_chop(attacker, defender) return TRUE - if("leg_sweep") + if("low_sweep") streak = "" - leg_sweep(attacker, defender) + low_sweep(attacker, defender) return TRUE if("quick_choke")//is actually lung punch streak = "" @@ -105,26 +115,40 @@ return TRUE return FALSE -/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/attacker, mob/living/defender) +/datum/martial_art/kaza_ruk/proc/low_sweep(mob/living/attacker, mob/living/defender) if(defender.stat != CONSCIOUS || defender.IsParalyzed()) return MARTIAL_ATTACK_INVALID if(HAS_TRAIT(attacker, TRAIT_PACIFISM)) return MARTIAL_ATTACK_INVALID // Does 5 damage, so we can't let pacifists leg sweep. + + var/tail_sweeping = FALSE + var/sweeping_language = "leg" + if(ishuman(attacker)) + var/mob/living/carbon/possible_human = attacker + var/obj/item/organ/tail/lizard/possible_lizard_tail = possible_human.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(possible_lizard_tail) + tail_sweeping = TRUE + sweeping_language = "tail" + defender.visible_message( - span_warning("[attacker] leg sweeps [defender]!"), + span_warning("[attacker] [sweeping_language] sweeps [defender]!"), span_userdanger("Your legs are sweeped by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker, ) - to_chat(attacker, span_danger("You leg sweep [defender]!")) + to_chat(attacker, span_danger("You [sweeping_language] sweep [defender]!")) playsound(attacker, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + + if(tail_sweeping) + attacker.emote("spin") + defender.apply_damage(5, BRUTE, BODY_ZONE_CHEST) defender.Knockdown(6 SECONDS) log_combat(attacker, defender, "leg sweeped") return MARTIAL_ATTACK_SUCCESS -/datum/martial_art/krav_maga/proc/quick_choke(mob/living/attacker, mob/living/defender)//is actually lung punch +/datum/martial_art/kaza_ruk/proc/quick_choke(mob/living/attacker, mob/living/defender)//is actually lung punch attacker.do_attack_animation(defender) defender.visible_message( span_warning("[attacker] pounds [defender] on the chest!"), @@ -141,7 +165,7 @@ log_combat(attacker, defender, "quickchoked") return MARTIAL_ATTACK_SUCCESS -/datum/martial_art/krav_maga/proc/neck_chop(mob/living/attacker, mob/living/defender) +/datum/martial_art/kaza_ruk/proc/neck_chop(mob/living/attacker, mob/living/defender) if(HAS_TRAIT(attacker, TRAIT_PACIFISM)) return MARTIAL_ATTACK_INVALID // Does 10 damage, so we can't let pacifists neck chop. attacker.do_attack_animation(defender) @@ -159,39 +183,16 @@ log_combat(attacker, defender, "neck chopped") return MARTIAL_ATTACK_SUCCESS -/datum/martial_art/krav_maga/harm_act(mob/living/attacker, mob/living/defender) - var/picked_hit_type = pick("punch", "kick") - var/bonus_damage = 0 - if(defender.body_position == LYING_DOWN) - bonus_damage += 5 - picked_hit_type = "stomp" - - if(defender.check_block(attacker, 10 + bonus_damage, "[attacker]'s [picked_hit_type]", UNARMED_ATTACK)) +/datum/martial_art/kaza_ruk/harm_act(mob/living/attacker, mob/living/defender) + if(defender.check_block(attacker, 10, attacker.name, UNARMED_ATTACK)) return MARTIAL_ATTACK_FAIL + if(check_streak(attacker, defender)) return MARTIAL_ATTACK_SUCCESS - log_combat(attacker, defender, "[picked_hit_type]ed") - var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) - defender.apply_damage(10 + bonus_damage, attacker.get_attack_type(), affecting) - if(picked_hit_type == "kick" || picked_hit_type == "stomp") - attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) - playsound(defender, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) - else - attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - playsound(defender, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) - defender.visible_message( - span_danger("[attacker] [picked_hit_type]s [defender]!"), - span_userdanger("You're [picked_hit_type]ed by [attacker]!"), - span_hear("You hear a sickening sound of flesh hitting flesh!"), - COMBAT_MESSAGE_RANGE, - attacker, - ) - to_chat(attacker, span_danger("You [picked_hit_type] [defender]!")) - log_combat(attacker, defender, "[picked_hit_type] with [name]") - return MARTIAL_ATTACK_SUCCESS + return MARTIAL_ATTACK_INVALID -/datum/martial_art/krav_maga/disarm_act(mob/living/attacker, mob/living/defender) +/datum/martial_art/kaza_ruk/disarm_act(mob/living/attacker, mob/living/defender) if(defender.check_block(attacker, 0, attacker.name, UNARMED_ATTACK)) return MARTIAL_ATTACK_FAIL if(check_streak(attacker, defender)) @@ -208,22 +209,65 @@ ) to_chat(attacker, span_danger("You disarm [defender]!")) playsound(defender, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) - log_combat(attacker, defender, "disarmed (Krav Maga)", addition = "(disarmed of [stuff_in_hand])") + log_combat(attacker, defender, "disarmed (Kaza Ruk)", addition = "(disarmed of [stuff_in_hand])") return MARTIAL_ATTACK_INVALID // normal shove -//Krav Maga Gloves +/// First, determine if we're going to execute our followup attack -/obj/item/clothing/gloves/krav_maga - abstract_type = /obj/item/clothing/gloves/krav_maga +/datum/martial_art/kaza_ruk/proc/blow_followup(mob/living/source, mob/living/target, damage, attack_type, obj/item/bodypart/affecting, final_armor_block, kicking, limb_sharpness) + SIGNAL_HANDLER + + if(!prob(50)) + return + + addtimer(CALLBACK(src, PROC_REF(execute_followup), source, target, damage, attack_type, affecting, final_armor_block, kicking, limb_sharpness), 0.25 SECONDS) + +/// After our delay, do the followup. + +/datum/martial_art/kaza_ruk/proc/execute_followup(mob/living/source, mob/living/target, damage, attack_type, obj/item/bodypart/affecting, final_armor_block, kicking, limb_sharpness) + if(QDELETED(source) || QDELETED(target)) + return + + if(!source.Adjacent(target)) + return + + var/tail_usage = FALSE + var/kick_language = "an axe kick" + var/strike_language = "an elbow strike" + if(ishuman(source)) + var/mob/living/carbon/possible_human = source + var/obj/item/organ/tail/lizard/possible_lizard_tail = possible_human.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(possible_lizard_tail) + tail_usage = TRUE + kick_language = "a helmsplitter tail strike" + strike_language = "a whiplash tail spin" + + source.visible_message( + span_warning("[source] follows up with [kicking ? kick_language : strike_language] against [target]!"), + span_notice("You deliver [kicking ? kick_language : strike_language] against [target]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + ) + if(tail_usage) + source.emote(kicking ? "flip" : "spin") + playsound(source, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) + source.do_attack_animation(target, ATTACK_EFFECT_KICK) + target.apply_damage(round(damage/3,1), attack_type, affecting, final_armor_block, wound_bonus = damage) //Ostensibly, apply a third of our damage again // We're not being too fussy about limb bonuses for this + log_combat(source, target, "auto-followup strike (Kaza Ruk)") + +//Kaza Ruk Gloves + +/obj/item/clothing/gloves/kaza_ruk + abstract_type = /obj/item/clothing/gloves/kaza_ruk clothing_traits = list(TRAIT_FAST_CUFFING) -/obj/item/clothing/gloves/krav_maga/Initialize(mapload) +/obj/item/clothing/gloves/kaza_ruk/Initialize(mapload) . = ..() - AddComponent(/datum/component/martial_art_giver, /datum/martial_art/krav_maga) + AddComponent(/datum/component/martial_art_giver, /datum/martial_art/kaza_ruk) -/obj/item/clothing/gloves/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." +/obj/item/clothing/gloves/kaza_ruk/sec//more obviously named, given to sec + name = "kaza ruk gloves" + desc = "These gloves seem to guide you through a non-lizardperson friendly variant of the Tiziran martial art, Kaza Ruk. \ + You're not entirely sure how they do that. Probably nanites." icon_state = "fightgloves" greyscale_colors = "#c41e0d" cold_protection = HANDS @@ -232,9 +276,9 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE -/obj/item/clothing/gloves/krav_maga/combatglovesplus +/obj/item/clothing/gloves/kaza_ruk/combatglovesplus name = "combat gloves plus" - desc = "These tactical gloves are fireproof and electrically insulated, and through the use of nanochip technology will teach you the martial art of krav maga." + desc = "These tactical gloves are fireproof and electrically insulated. These gloves seem to guide you through a non-lizardperson friendly variant of the Tiziran martial art, Kaza Ruk." icon_state = "black" greyscale_colors = "#2f2e31" siemens_coefficient = 0 @@ -244,9 +288,9 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor_type = /datum/armor/krav_maga_combatglovesplus + armor_type = /datum/armor/kaza_ruk_combatglovesplus -/datum/armor/krav_maga_combatglovesplus +/datum/armor/kaza_ruk_combatglovesplus bio = 90 fire = 80 acid = 50 diff --git a/code/game/objects/items/implants/implant_kaza_ruk.dm b/code/game/objects/items/implants/implant_kaza_ruk.dm new file mode 100644 index 00000000000..ce26fb1b678 --- /dev/null +++ b/code/game/objects/items/implants/implant_kaza_ruk.dm @@ -0,0 +1,41 @@ +/obj/item/implant/kaza_ruk + name = "kaza ruk implant" + desc = "Teaches you the Tiziran martial arts of Kaza Ruk in 5 short instructional videos beamed directly into your eyeballs." + icon = 'icons/obj/scrolls.dmi' + icon_state ="scroll2" + /// The martial art style this implant teaches. + var/datum/martial_art/kaza_ruk/style + +/obj/item/implant/kaza_ruk/get_data() + var/dat = {"Implant Specifications:
+ Name: Kaza Ruk Implant
+ Life: 4 hours after death of host
+ Implant Details:
+ Function: Teaches even the clumsiest host the arts of Kaza Ruk."} + return dat + +/obj/item/implant/kaza_ruk/Initialize(mapload) + . = ..() + style = new(src) + +/obj/item/implant/kaza_ruk/Destroy() + QDEL_NULL(style) + return ..() + +/obj/item/implant/kaza_ruk/activate() + . = ..() + if(isnull(imp_in.mind)) + return + if(style.unlearn(imp_in)) + return + + style.teach(imp_in) + +/obj/item/implanter/kaza_ruk + name = "implanter (kaza ruk)" + imp_type = /obj/item/implant/kaza_ruk + +/obj/item/implantcase/kaza_ruk + name = "implant case - 'Kaza Ruk'" + desc = "A glass case containing an implant that can teach the user the Tiziran martial arts of Kaza Ruk." + imp_type = /obj/item/implant/kaza_ruk diff --git a/code/game/objects/items/implants/implant_krav_maga.dm b/code/game/objects/items/implants/implant_krav_maga.dm deleted file mode 100644 index 5dd821a683d..00000000000 --- a/code/game/objects/items/implants/implant_krav_maga.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/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/scrolls.dmi' - icon_state ="scroll2" - /// The martial art style this implant teaches. - var/datum/martial_art/krav_maga/style - -/obj/item/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/implant/krav_maga/Initialize(mapload) - . = ..() - style = new(src) - -/obj/item/implant/krav_maga/Destroy() - QDEL_NULL(style) - return ..() - -/obj/item/implant/krav_maga/activate() - . = ..() - if(isnull(imp_in.mind)) - return - if(style.unlearn(imp_in)) - return - - style.teach(imp_in) - -/obj/item/implanter/krav_maga - name = "implanter (krav maga)" - imp_type = /obj/item/implant/krav_maga - -/obj/item/implantcase/krav_maga - name = "implant case - 'Krav Maga'" - desc = "A glass case containing an implant that can teach the user the arts of Krav Maga." - imp_type = /obj/item/implant/krav_maga diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm index 4fe7ad9c664..fb0a5742773 100644 --- a/code/game/objects/items/storage/garment.dm +++ b/code/game/objects/items/storage/garment.dm @@ -100,7 +100,7 @@ new /obj/item/clothing/suit/armor/vest/warden/alt(src) new /obj/item/clothing/under/rank/security/warden/formal(src) new /obj/item/clothing/under/rank/security/warden/skirt(src) - new /obj/item/clothing/gloves/krav_maga/sec(src) + new /obj/item/clothing/gloves/kaza_ruk/sec(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/clothing/mask/gas/sechailer(src) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 4529983a926..f00ec2945fd 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -301,7 +301,7 @@ new /obj/item/clothing/head/helmet/marine/pmc(src) new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/clothing/glasses/night(src) // 3~ TC - new /obj/item/clothing/gloves/krav_maga/combatglovesplus(src) //5TC + new /obj/item/clothing/gloves/kaza_ruk/combatglovesplus(src) //5TC new /obj/item/clothing/shoes/jackboots(src) new /obj/item/storage/belt/military/assault/fisher(src) //items in this belt easily costs 18 TC diff --git a/code/modules/deathmatch/deathmatch_modifier.dm b/code/modules/deathmatch/deathmatch_modifier.dm index 9a225bc67da..ed657caedfd 100644 --- a/code/modules/deathmatch/deathmatch_modifier.dm +++ b/code/modules/deathmatch/deathmatch_modifier.dm @@ -580,7 +580,7 @@ name = "Random martial arts" description = "Everyone learns a random martial art!" blacklisted_maps = list(/datum/lazy_template/deathmatch/meatower) - // krav maga excluded because its too common and too simple, mushpunch excluded because its horrible and not even funny + // kaza ruk excluded because its too common and too simple, mushpunch excluded because its horrible and not even funny var/static/list/weighted_martial_arts = list( // common /datum/martial_art/cqc = 30, diff --git a/code/modules/uplink/uplink_items/spy_unique.dm b/code/modules/uplink/uplink_items/spy_unique.dm index 04f9b4ba6f5..e201b804df5 100644 --- a/code/modules/uplink/uplink_items/spy_unique.dm +++ b/code/modules/uplink/uplink_items/spy_unique.dm @@ -31,10 +31,10 @@ item = /obj/item/clothing/gloves/combat cost = 1 -/datum/uplink_item/spy_unique/krav_maga +/datum/uplink_item/spy_unique/kaza_ruk name = "Combat Gloves Plus" desc = "A pair of combat gloves plus. They're insulated AND you can do martial arts with it!" - item = /obj/item/clothing/gloves/krav_maga/combatglovesplus + item = /obj/item/clothing/gloves/kaza_ruk/combatglovesplus /datum/uplink_item/spy_unique/tackle_gloves name = "Guerrilla Gloves" diff --git a/tgstation.dme b/tgstation.dme index 604bd04a20f..2d55c38f86d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1757,7 +1757,7 @@ #include "code\datums\martial\boxing.dm" #include "code\datums\martial\cqc.dm" #include "code\datums\martial\junglearts.dm" -#include "code\datums\martial\krav_maga.dm" +#include "code\datums\martial\kaza_ruk.dm" #include "code\datums\martial\mushpunch.dm" #include "code\datums\martial\plasma_fist.dm" #include "code\datums\martial\psychotic_brawl.dm" @@ -2735,7 +2735,7 @@ #include "code\game\objects\items\implants\implant_deathrattle.dm" #include "code\game\objects\items\implants\implant_explosive.dm" #include "code\game\objects\items\implants\implant_freedom.dm" -#include "code\game\objects\items\implants\implant_krav_maga.dm" +#include "code\game\objects\items\implants\implant_kaza_ruk.dm" #include "code\game\objects\items\implants\implant_mindshield.dm" #include "code\game\objects\items\implants\implant_misc.dm" #include "code\game\objects\items\implants\implant_spell.dm"