diff --git a/aurorastation.dme b/aurorastation.dme
index a7b40d6b48f..b0135610e24 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1544,6 +1544,7 @@
#include "code\modules\martial_arts\skrell.dm"
#include "code\modules\martial_arts\sleeping_carp.dm"
#include "code\modules\martial_arts\sol_combat.dm"
+#include "code\modules\martial_arts\swordsmanship.dm"
#include "code\modules\martial_arts\tajara.dm"
#include "code\modules\martial_arts\unathi.dm"
#include "code\modules\martial_arts\vaurca.dm"
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index d741a25cab0..1f29c59efa9 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -91,10 +91,17 @@ avoid code duplication. This includes items that may sometimes act as a standard
var/power = force
if(HULK in user.mutations)
power *= 2
- if(istype(user, /mob/living/carbon/human))
+ if(ishuman(user))
var/mob/living/carbon/human/X = user
if(X.gloves && istype(X.gloves,/obj/item/clothing/gloves/force))
var/obj/item/clothing/gloves/force/G = X.gloves
power *= G.amplification
+
+ if(ishuman(target))
+ if(X.martial_art && X.martial_art.weapon_affinity && istype(src, X.martial_art.weapon_affinity))
+ perform_technique(target, X, hit_zone)
+
return target.hit_with_weapon(src, user, power, hit_zone)
+/obj/item/proc/perform_technique(var/mob/living/carbon/human/target, var/mob/living/carbon/human/user, var/target_zone) //used when weapons have special interactions with martial arts
+ return
\ No newline at end of file
diff --git a/code/datums/trading/misc.dm b/code/datums/trading/misc.dm
index b41b467d52d..94dfd0500e3 100644
--- a/code/datums/trading/misc.dm
+++ b/code/datums/trading/misc.dm
@@ -141,6 +141,7 @@
/obj/item/clothing/head/plaguedoctorhat = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/unathi = TRADER_THIS_TYPE,
/obj/item/clothing/head/helmet/tank = TRADER_ALL,
+ /obj/item/clothing/head/helmet/tajara = TRADER_THIS_TYPE,
/obj/item/clothing/glasses/monocle = TRADER_THIS_TYPE,
/obj/item/clothing/mask/smokable/pipe = TRADER_THIS_TYPE,
/obj/item/clothing/mask/gas/plaguedoctor = TRADER_THIS_TYPE,
@@ -150,6 +151,7 @@
/obj/item/clothing/suit/wizrobe/magusred = TRADER_THIS_TYPE,
/obj/item/clothing/suit/wizrobe/magusblue = TRADER_THIS_TYPE,
/obj/item/clothing/suit/armor/unathi = TRADER_THIS_TYPE,
+ /obj/item/clothing/suit/armor/tajara = TRADER_THIS_TYPE,
/obj/item/clothing/under/gladiator = TRADER_THIS_TYPE,
/obj/item/clothing/under/kilt = TRADER_THIS_TYPE,
/obj/item/clothing/under/redcoat = TRADER_THIS_TYPE,
diff --git a/code/datums/uplink/highly visible and dangerous weapons.dm b/code/datums/uplink/highly visible and dangerous weapons.dm
index e403d458c5b..1004d10141c 100644
--- a/code/datums/uplink/highly visible and dangerous weapons.dm
+++ b/code/datums/uplink/highly visible and dangerous weapons.dm
@@ -77,12 +77,12 @@
/datum/uplink_item/item/visible_weapons/wrestling
name = "Wrestling Manual"
item_cost = 6
- path = /obj/item/wrestling_manual
+ path = /obj/item/martial_manual/wrestling
/datum/uplink_item/item/visible_weapons/solcom
name = "SolCom Manual"
item_cost = 6
- path = /obj/item/sol_combat_manual
+ path = /obj/item/martial_manual
/datum/uplink_item/item/visible_weapons/heavysniper
name = "Anti-materiel Rifle"
diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm
index 2e640352af1..0da54ef43b3 100644
--- a/code/game/objects/items/weapons/material/swords.dm
+++ b/code/game/objects/items/weapons/material/swords.dm
@@ -12,16 +12,51 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
can_embed = 0
- var/parry_chance = 50
+ var/parry_chance = 40
/obj/item/weapon/material/sword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
+ var/parry_bonus = 1
- if(default_parry_check(user, attacker, damage_source) && prob(parry_chance))
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.martial_art && H.martial_art.weapon_affinity && istype(src, H.martial_art.weapon_affinity))
+ parry_bonus = H.martial_art.parry_multiplier
+
+ if(default_parry_check(user, attacker, damage_source) && prob(parry_chance * parry_bonus))
user.visible_message("\The [user] parries [attack_text] with \the [src]!")
playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
return 1
return 0
+/obj/item/weapon/material/sword/perform_technique(var/mob/living/carbon/human/target, var/mob/living/carbon/human/user, var/target_zone)
+ var/armor_reduction = target.run_armor_check(target_zone,"melee")
+ var/obj/item/organ/external/affecting = target.get_organ(target_zone)
+ if(!affecting)
+ return
+
+ user.do_attack_animation(target)
+
+ if(target_zone == "head" || target_zone == "eyes" || target_zone == "mouth")
+ if(prob(70 - armor_reduction))
+ target.eye_blurry += 5
+ target.confused += 10
+ return TRUE
+
+ if(target_zone == "r_arm" || target_zone == "l_arm" || target_zone == "r_hand" || target_zone == "l_hand")
+ if(prob(80 - armor_reduction))
+ if(target_zone == "r_arm" || target_zone == "r_hand")
+ target.drop_r_hand()
+ else
+ target.drop_l_hand()
+ return TRUE
+
+ if(target_zone == "r_feet" || target_zone == "l_feet" || target_zone == "r_leg" || target_zone == "l_leg")
+ if(prob(60 - armor_reduction))
+ target.Weaken(5)
+ return TRUE
+
+ return FALSE
+
/obj/item/weapon/material/sword/katana
name = "katana"
desc = "Woefully underpowered in D20. This one looks pretty sharp."
@@ -104,3 +139,12 @@
item_state = "gladius"
contained_sprite = 1
slot_flags = SLOT_BELT
+
+/obj/item/weapon/material/sword/amohdan_sword
+ name = "amohdan blade"
+ desc = "A tajaran sword, commonly used by the swordsmen of the island of Amohda."
+ icon = 'icons/obj/sword.dmi'
+ icon_state = "amohdan_sword"
+ item_state = "amohdan_sword"
+ contained_sprite = 1
+ slot_flags = SLOT_BELT
\ No newline at end of file
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 023b7383c63..b785398a483 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -248,3 +248,16 @@
body_parts_covered = HEAD|FACE|EYES
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
armor = list(melee = 50, bullet = 30, laser = 30, energy = 15, bomb = 40, bio = 0, rad = 0)
+
+/obj/item/clothing/head/helmet/tajara
+ name = "amohdan swordsmen helmet"
+ desc = "A helmet used by the traditional warriors of Amohhda."
+ icon = 'icons/obj/tajara_items.dmi'
+ icon_state = "amohdan_helmet"
+ item_state = "amohdan_helmet"
+ contained_sprite = TRUE
+ body_parts_covered = HEAD|FACE|EYES
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
+ species_restricted = list("Tajara")
+ armor = list(melee = 60, bullet = 50, laser = 20, energy = 10, bomb = 5, bio = 0, rad = 0)
+ allow_hair_covering = FALSE
\ No newline at end of file
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 8f65cfe0b3c..5ff51e7ffe9 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -498,10 +498,23 @@
icon = 'icons/obj/unathi_items.dmi'
icon_state = "unathi_armor"
item_state = "unathi_armor"
- contained_sprite = 1
+ contained_sprite = TRUE
species_restricted = list("Unathi")
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
+/obj/item/clothing/suit/armor/tajara
+ name = "amohdan swordsmen armor"
+ desc = "A suit of armor used by the traditional warriors of Amohhda."
+ icon = 'icons/obj/tajara_items.dmi'
+ icon_state = "amohdan_armor"
+ item_state = "amohdan_armor"
+ contained_sprite = TRUE
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ allowed = list(/obj/item/weapon/gun,/obj/item/weapon/material/sword)
+ flags_inv = HIDEJUMPSUIT|HIDETAIL
+ species_restricted = list("Tajara")
+ armor = list(melee = 60, bullet = 50, laser = 20, energy = 10, bomb = 5, bio = 0, rad = 0)
+
//tau ceti foreign legion armor
/obj/item/clothing/suit/storage/vest/legion
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index 890bcd4a136..e1f9950220f 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -9,6 +9,9 @@
var/no_guns = FALSE //set to TRUE to prevent users of this style from using guns
var/no_guns_message = "" //message to tell the style user if they try and use a gun while no_guns = TRUE (DISHONORABRU!)
var/temporary = 0
+ var/weapon_affinity //if this martial art has any interaction with a weapon, also spawns said weapon when the manual is used
+ var/parry_multiplier = 1 //if this martial art increases the chance of parrying with the weapon
+ var/list/possible_weapons //if any weapon is spawned when you use the martial art manual
/datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
return 0
@@ -165,4 +168,24 @@
if(!A)
break
A.set_dir(i)
- playsound(A.loc, 'sound/weapons/punch1.ogg', 15, 1, -1)
\ No newline at end of file
+ playsound(A.loc, 'sound/weapons/punch1.ogg', 15, 1, -1)
+
+/obj/item/martial_manual
+ name = "SolCom manual"
+ desc = "A manual designated to teach the user about the martial art of solarian combat, a style based on traditional human martial arts."
+ icon = 'icons/obj/library.dmi'
+ icon_state ="cqcmanual"
+ var/martial_art = /datum/martial_art/sol_combat
+
+/obj/item/martial_manual/attack_self(mob/user as mob)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ var/datum/martial_art/F = new martial_art(null)
+ F.teach(H)
+ to_chat(H, "You have learned the martial art of [F.name].")
+ if(F.possible_weapons)
+ var/weapon = pick(F.possible_weapons)
+ var/obj/item/W = new weapon(get_turf(user))
+ H.put_in_hands(W)
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/martial_arts/plasma_fist.dm b/code/modules/martial_arts/plasma_fist.dm
index 2665468173c..4e99aee6644 100644
--- a/code/modules/martial_arts/plasma_fist.dm
+++ b/code/modules/martial_arts/plasma_fist.dm
@@ -107,20 +107,9 @@
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.")
-/obj/item/plasma_fist_scroll
+/obj/item/martial_manual/plasma_fist
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"
-
-/obj/item/plasma_fist_scroll/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- 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.")
- visible_message("[src] lights up in fire and quickly burns to ash.")
- new /obj/effect/decal/cleanable/ash(get_turf(src))
- user.drop_from_inventory(src,get_turf(src))
- qdel(src)
\ No newline at end of file
+ martial_art = /datum/martial_art/plasma_fist
diff --git a/code/modules/martial_arts/skrell.dm b/code/modules/martial_arts/skrell.dm
index bea3f6d2f46..6fe745868f3 100644
--- a/code/modules/martial_arts/skrell.dm
+++ b/code/modules/martial_arts/skrell.dm
@@ -78,22 +78,6 @@ datum/martial_art/karak_virul/grab_act(var/mob/living/carbon/human/A, var/mob/li
basic_hit(A,D)
return 1
-
-/obj/item/karak_virul_manual
- name = "karak virul manual"
- desc = "A manual designated to teach the user about the skrellian martial art of Karak Virul."
- icon = 'icons/obj/library.dmi'
- icon_state ="cqcmanual"
-
-/obj/item/karak_virul_manual/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/karak_virul/F = new/datum/martial_art/karak_virul(null)
- F.teach(H)
- to_chat(H, "You have learned the martial art of Karak Virul.")
- qdel(src)
-
/datum/martial_art/karak_virul/proc/karak_virul_help()
set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Karak Virul."
@@ -104,3 +88,7 @@ datum/martial_art/karak_virul/grab_act(var/mob/living/carbon/human/A, var/mob/li
to_chat(usr, "Leg Sweep: Disarm Harm Disarm.. Trips the victim, rendering them prone and unable to move for a short time.")
to_chat(usr, "Dislocating Strike: Harm Disarm Disarm Disarm. Delivers a strong punch that can dislocate your target's limb.")
+/obj/item/martial_manual/skrell
+ name = "karak virul manual"
+ desc = "A manual designated to teach the user about the skrellian martial art of Karak Virul."
+ martial_art = /datum/martial_art/karak_virul
\ No newline at end of file
diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm
index c389ccaf86e..b32caa9da9e 100644
--- a/code/modules/martial_arts/sleeping_carp.dm
+++ b/code/modules/martial_arts/sleeping_carp.dm
@@ -122,24 +122,9 @@
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.")
-/obj/item/sleeping_carp_scroll
+/obj/item/martial_manual/sleeping_carp
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/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)
- visible_message("[src] lights up in fire and quickly burns to ash.")
- new /obj/effect/decal/cleanable/ash(get_turf(src))
- user.drop_from_inventory(src,get_turf(src))
- qdel(src)
\ No newline at end of file
+ martial_art = /datum/martial_art/the_sleeping_carp
\ No newline at end of file
diff --git a/code/modules/martial_arts/sol_combat.dm b/code/modules/martial_arts/sol_combat.dm
index d0012c68ec4..07f2dbe3c68 100644
--- a/code/modules/martial_arts/sol_combat.dm
+++ b/code/modules/martial_arts/sol_combat.dm
@@ -25,7 +25,7 @@
A.do_attack_animation(D)
if(D.stat || D.weakened)
return 0
- D.visible_message("[A] leg sweeps [D]!")
+ A.visible_message("[A] leg sweeps [D]!")
playsound(get_turf(A), "swing_hit", 50, 1, -1)
D.apply_damage(5, BRUTE)
D.Weaken(2)
@@ -33,7 +33,7 @@
/datum/martial_art/sol_combat/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
A.do_attack_animation(D)
- D.visible_message("[A] pounds [D] on the chest!")
+ A.visible_message("[A] pounds [D] on the chest!")
playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1)
if(!(D.species.flags & NO_BREATHE))
D.losebreath += 5
@@ -42,7 +42,7 @@
/datum/martial_art/sol_combat/proc/neck_chop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
A.do_attack_animation(D)
- D.visible_message("[A] karate chops [D]'s neck!")
+ A.visible_message("[A] karate chops [D]'s neck!")
playsound(get_turf(A), "punch", 50, 1, -1)
D.apply_damage(5, BRUTE)
D.silent += 10
@@ -70,7 +70,7 @@ datum/martial_art/sol_combat/grab_act(var/mob/living/carbon/human/A, var/mob/liv
else
playsound(get_turf(D), "punch", 50, 1, -1)
- D.visible_message("[A] [picked_hit_type] [D]!")
+ A.visible_message("[A] [picked_hit_type] [D]!")
A.attack_log += text("\[[time_stamp()]\] ["[picked_hit_type]"] [D.name] ([D.ckey])")
D.attack_log += text("\[[time_stamp()]\] ["Has Been [picked_hit_type]"] by [A.name] ([A.ckey])")
msg_admin_attack("[key_name(A)] ["has [picked_hit_type]"] [key_name(D)] (JMP)",ckey=key_name(A),ckey_target=key_name(D))
@@ -88,39 +88,17 @@ datum/martial_art/sol_combat/grab_act(var/mob/living/carbon/human/A, var/mob/liv
msg_admin_attack("[key_name(A)] disarmed [D.name] ([D.ckey]) (JMP)",ckey=key_name(D),ckey_target=key_name(A))
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]!")
- playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ var/obj/item/I = D.get_active_hand()
+ if(I)
+ A.visible_message("[A] has disarmed [D]!")
+ playsound(D, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ D.drop_from_inventory(I)
+ A.put_in_hands(I)
else
- D.visible_message("[A] attempted to disarm [D]!")
+ A.visible_message("[A] attempted to disarm [D]!")
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
return 1
-/obj/item/sol_combat_manual
- name = "SolCom manual"
- desc = "A manual designated to teach the user about the martial art of solarian combat, a style based on traditional human martial arts."
- icon = 'icons/obj/library.dmi'
- icon_state ="cqcmanual"
-
-/obj/item/sol_combat_manual/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/sol_combat/F = new/datum/martial_art/sol_combat(null)
- F.teach(H)
- to_chat(H, "You have learned the martial art of Solarian Combat.")
- qdel(src)
-
-
/datum/martial_art/sol_combat/proc/sol_combat_help()
set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Solarian Combat."
diff --git a/code/modules/martial_arts/swordsmanship.dm b/code/modules/martial_arts/swordsmanship.dm
new file mode 100644
index 00000000000..ba0124fdcdd
--- /dev/null
+++ b/code/modules/martial_arts/swordsmanship.dm
@@ -0,0 +1,11 @@
+/datum/martial_art/swordsmanship
+ name = "Swordsmanship"
+ weapon_affinity = /obj/item/weapon/material/sword
+ parry_multiplier = 2
+ possible_weapons = list(/obj/item/weapon/material/sword, /obj/item/weapon/material/sword/katana, /obj/item/weapon/material/sword/rapier)
+
+/obj/item/martial_manual/swordsmanship
+ name = "swordsmanship manual"
+ desc = "A manual containing basic swordsmanship instruction and techniques."
+ icon_state ="rulebook"
+ martial_art = /datum/martial_art/swordsmanship
diff --git a/code/modules/martial_arts/tajara.dm b/code/modules/martial_arts/tajara.dm
index 60bd8fa6638..58f9d080f77 100644
--- a/code/modules/martial_arts/tajara.dm
+++ b/code/modules/martial_arts/tajara.dm
@@ -81,7 +81,6 @@
basic_hit(A,D)
return 1
-
/datum/martial_art/baghrar/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
add_to_streak("D",D)
if(check_streak(A,D))
@@ -89,22 +88,6 @@
basic_hit(A,D)
return 1
-
-/obj/item/baghrar_manual
- name = "baghrar manual"
- desc = "A manual designated to teach the user about the tajaran martial art of Baghrar."
- icon = 'icons/obj/library.dmi'
- icon_state ="cqcmanual"
-
-/obj/item/baghrar_manual/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/baghrar/F = new/datum/martial_art/baghrar(null)
- F.teach(H)
- to_chat(H, "You have learned the martial art of Baqhrar.")
- qdel(src)
-
/datum/martial_art/baghrar/proc/baghrar_help()
set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Baghrar."
@@ -115,3 +98,8 @@
to_chat(usr, "Claw Punch: Disarm Harm Harm. Hits your target with your claws, dealing damage and causing bleeding.")
to_chat(usr, "Rrak'narrr Stab: Harm Harm Disarm Disarm. Stabs your target with your claws, dealing more damage based on how hurt they are.")
+/obj/item/martial_manual/tajara
+ name = "baghrar manual"
+ desc = "A manual designated to teach the user about the tajaran martial art of Baghrar."
+ martial_art = /datum/martial_art/baghrar
+
diff --git a/code/modules/martial_arts/unathi.dm b/code/modules/martial_arts/unathi.dm
index 695321aeeda..8ffcadea96c 100644
--- a/code/modules/martial_arts/unathi.dm
+++ b/code/modules/martial_arts/unathi.dm
@@ -88,21 +88,6 @@
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)
-/obj/item/kis_khan_manual
- name = "kis khan scroll"
- desc = "A parched scroll.It seems to be drawings of some sort of martial art involving tails."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "scroll2"
-
-/obj/item/kis_khan_manual/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/kis_khan/F = new/datum/martial_art/kis_khan(null)
- F.teach(H)
- to_chat(H, "You have learned the martial art of Kis Khan.")
- qdel(src)
-
/datum/martial_art/kis_khan/proc/kis_khan_help()
set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Kis-khan."
@@ -113,3 +98,9 @@
to_chat(usr, "Swift Disarm: Disarm Disarm Grab. Strikes your target's weapon, trying to disarm it from their hands.")
to_chat(usr, "Hammering Strike: Disarm Harm Disarm. Delivers a strikes that will push the target away from you.")
+/obj/item/martial_manual/unathi
+ name = "kis khan scroll"
+ desc = "A parched scroll.It seems to be drawings of some sort of martial art involving tails."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "scroll2"
+ martial_art = /datum/martial_art/kis_khan
\ No newline at end of file
diff --git a/code/modules/martial_arts/vaurca.dm b/code/modules/martial_arts/vaurca.dm
index a17ccafa1d2..ad663959b1e 100644
--- a/code/modules/martial_arts/vaurca.dm
+++ b/code/modules/martial_arts/vaurca.dm
@@ -56,45 +56,30 @@
/datum/martial_art/vkutet/proc/swift_bite(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] gets a strong grip on [D]!")
- if(isvaurca(A))
- A.bugbite()
- qdel(G)
+ if(istype(A.get_active_hand(),/obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = A.get_active_hand()
+ if(G && G.affecting == D)
+ G.state = GRAB_AGGRESSIVE
+ D.visible_message("[A] gets a strong grip on [D]!")
+ if(isvaurca(A))
+ A.bugbite()
+ qdel(G)
return 1
/datum/martial_art/vkutet/proc/crushing_jaws(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(!isvaurca(A))
return 0
- if(istype(A.get_inactive_hand(),/obj/item/weapon/grab))
- D.grabbedby(A,1)
- var/obj/item/weapon/grab/G = A.get_inactive_hand()
- if(G.affecting == D)
- if(G.affecting == D)
- var/armor_block = D.run_armor_check(null, "melee")
- A.visible_message("[A] crushes [D] with its mandibles!")
- D.apply_damage(30, BRUTE, null, armor_block)
- D.apply_effect(6, WEAKEN, armor_block)
- qdel(G)
+ D.grabbedby(A,1)
+ if(istype(A.get_active_hand(),/obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = A.get_active_hand()
+ if(G && G.affecting == D)
+ var/armor_block = D.run_armor_check(null, "melee")
+ A.visible_message("[A] crushes [D] with its mandibles!")
+ D.apply_damage(30, BRUTE, null, armor_block)
+ D.apply_effect(6, WEAKEN, armor_block)
+ qdel(G)
return 1
-/obj/item/vkutet_manual
- name = "vk'utet data disk"
- desc = "A data disk containing information about the vaurca fighting technice know as Vk'utet."
- icon = 'icons/obj/vaurca_items.dmi'
- icon_state = "harddisk"
-
-/obj/item/vkutet_manual/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/vkutet/F = new/datum/martial_art/vkutet(null)
- F.teach(H)
- to_chat(H, "You have learned the martial art of Vk'utet.")
- qdel(src)
-
/datum/martial_art/vkutet/proc/vkutet_help()
set name = "Recall Teachings"
set desc = "Remember the martial techniques of the Vk'utet."
@@ -105,3 +90,9 @@
to_chat(usr, "Swift Bite: Disarm Disarm Grab. Quickly grabs your victim and bites them with your mandibles.")
to_chat(usr, "Crushing Jaws: Harm Harm Disarm Grab. Grabs your victim and violently crushes them with your mandibles, inflicting heavy damage.")
+/obj/item/martial_manual/vaurca
+ name = "vk'utet data disk"
+ desc = "A data disk containing information about the vaurca fighting technice know as Vk'utet."
+ icon = 'icons/obj/vaurca_items.dmi'
+ icon_state = "harddisk"
+ martial_art = /datum/martial_art/vkutet
\ No newline at end of file
diff --git a/code/modules/martial_arts/wrestling.dm b/code/modules/martial_arts/wrestling.dm
index ffa3136746e..beeb6e4e881 100644
--- a/code/modules/martial_arts/wrestling.dm
+++ b/code/modules/martial_arts/wrestling.dm
@@ -62,17 +62,7 @@
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 pain when grabbing someone.")
-/obj/item/wrestling_manual
+/obj/item/martial_manual/wrestling
name = "wrestling manual"
desc = "A manual designated to teach the user about the art of wrestling."
- icon = 'icons/obj/library.dmi'
- icon_state ="cqcmanual"
-
-/obj/item/wrestling_manual/attack_self(mob/user as mob)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- var/datum/martial_art/wrestling/F = new/datum/martial_art/wrestling(null)
- F.teach(H)
- to_chat(H, "You have learned the martial art of wrestling.")
- qdel(src)
\ No newline at end of file
+ martial_art = /datum/martial_art/wrestling
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 7a294b30bed..81078a3a1ac 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -15,10 +15,11 @@ emp_act
if(species_check)
return species_check
- if(martial_art && martial_art.deflection_chance)
- if(prob(martial_art.deflection_chance))
- src.visible_message("\The [src] deflects \the [P]!")
- return 0
+ if(!is_physically_disabled())
+ if(martial_art && martial_art.deflection_chance)
+ if(prob(martial_art.deflection_chance))
+ src.visible_message("\The [src] deflects \the [P]!")
+ return 0
def_zone = check_zone(def_zone)
if(!has_organ(def_zone))
diff --git a/html/changelogs/alberyk-martial.yml b/html/changelogs/alberyk-martial.yml
new file mode 100644
index 00000000000..35ee40842b2
--- /dev/null
+++ b/html/changelogs/alberyk-martial.yml
@@ -0,0 +1,6 @@
+author: Alberyk, Kyres1
+
+delete-after: True
+
+changes:
+ - rscadd: "Added some tajaran related gear to the merchant console."
diff --git a/icons/obj/sword.dmi b/icons/obj/sword.dmi
index 796d2d34888..d1d283466e7 100644
Binary files a/icons/obj/sword.dmi and b/icons/obj/sword.dmi differ
diff --git a/icons/obj/tajara_items.dmi b/icons/obj/tajara_items.dmi
index 0b9d07edb56..6f827ae8385 100644
Binary files a/icons/obj/tajara_items.dmi and b/icons/obj/tajara_items.dmi differ