Martial arts improvements and additions (#6094)

-adds framework for weapons based martial arts, implementing a very basic swordsmanship
-makes the martial art books more modular
-fixes some minor issues with some of the martial art code
-adds amohdan swordsmen gear, to be used in a future event/sold by the merchant
- fixes #6083
This commit is contained in:
Alberyk
2019-03-10 18:38:00 -03:00
committed by Erki
parent 7934515c6a
commit 15bfb052d7
21 changed files with 187 additions and 166 deletions

View File

@@ -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("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
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