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