diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
index 1eb2e7ecac..556a739841 100644
--- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
@@ -76,8 +76,9 @@
name = "Training Bokken"
result = /obj/item/melee/bokken
tools = list(TOOL_SCREWDRIVER)
- reqs = list(/obj/item/stack/sheet/mineral/wood = 10,
- /obj/item/stack/sheet/durathread = 2,
+ reqs = list(/obj/item/bokken_blade = 1,
+ /obj/item/bokken_hilt = 1,
+ /obj/item/stack/sheet/cloth = 2,
/obj/item/stack/sheet/leather = 1)
time = 60
category = CAT_WEAPONRY
@@ -87,9 +88,9 @@
name = "Training Wakizashi Bokken"
result = /obj/item/melee/bokken/waki
tools = list(TOOL_SCREWDRIVER)
- reqs = list(/obj/item/stack/sheet/mineral/wood = 5,
- /obj/item/stack/sheet/cloth = 1,
- /obj/item/stack/sheet/leather = 1)
+ reqs = list(/obj/item/wakibokken_blade = 1,
+ /obj/item/bokken_hilt = 1,
+ /obj/item/stack/sheet/cloth = 1)
time = 40
category = CAT_WEAPONRY
subcategory = CAT_MELEE
@@ -456,3 +457,51 @@
time = 20
category = CAT_WEAPONRY
subcategory = CAT_PARTS
+
+// BOKKEN CRAFTING
+
+/datum/crafting_recipe/bokken_blade
+ name = "Training Bokken Blade"
+ result = /obj/item/bokken_blade
+ tools = list(/obj/item/hatchet)
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 5)
+ time = 20
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
+/datum/crafting_recipe/wakibokken_blade
+ name = "Training Wakizashi Bokken Blade"
+ result = /obj/item/wakibokken_blade
+ tools = list(/obj/item/hatchet)
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 2)
+ time = 20
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
+/datum/crafting_recipe/bokken_ironblade
+ name = "Training Ironwood Bokken Blade"
+ result = /obj/item/bokken_ironblade
+ tools = list(/obj/item/hatchet, TOOL_WELDER)
+ reqs = list(/obj/item/grown/log/steel = 2)
+ time = 20
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
+/datum/crafting_recipe/wakibokken_blade
+ name = "Training Wakizashi Ironwood Bokken Blade"
+ result = /obj/item/wakibokken_ironblade
+ tools = list(/obj/item/hatchet, TOOL_WELDER)
+ reqs = list(/obj/item/grown/log/steel = 1)
+ time = 20
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
+
+/datum/crafting_recipe/bokken_hilt
+ name = "Training Bokken hilt"
+ result = /obj/item/bokken_hilt
+ tools = list(/obj/item/hatchet)
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 5,
+ /obj/item/stack/sheet/cloth = 2)
+ time = 20
+ category = CAT_WEAPONRY
+ subcategory = CAT_PARTS
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 7679ca617f..554e30d651 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -296,7 +296,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
- force = 8 //how much harm mode damage we do
+ force = 10 //how much harm mode damage we do
var/stamina_damage_increment = 5 //how much extra damage do we do when in non-harm mode
throwforce = 10
damtype = STAMINA
@@ -310,11 +310,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/quick_parry = FALSE // false = default parry, true = really small parry window
item_flags = ITEM_CAN_PARRY
block_parry_data = /datum/block_parry_data/bokken
+ var/default_parry_data = /datum/block_parry_data/bokken
+ var/quick_parry_data = /datum/block_parry_data/bokken/quick_parry
bare_wound_bonus = 0
wound_bonus = 0
/datum/block_parry_data/bokken // fucked up parry data, emphasizing quicker, shorter parries
- parry_stamina_cost = 8 // be wise about when you parry, though, else you won't be able to fight enough to make it count
+ parry_stamina_cost = 10 // be wise about when you parry, though, else you won't be able to fight enough to make it count
parry_time_windup = 0
parry_time_active = 10 // small parry window
parry_time_spindown = 0
@@ -330,11 +332,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
)
parry_failed_stagger_duration = 3 SECONDS
parry_data = list(
- PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
+ PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
)
/datum/block_parry_data/bokken/quick_parry // emphasizing REALLY SHORT PARRIES
- parry_stamina_cost = 6 // still more costly than most parries, but less than a full bokken parry
+ parry_stamina_cost = 8 // still more costly than most parries, but less than a full bokken parry
parry_time_active = 5 // REALLY small parry window
parry_time_perfect = 2.5 // however...
parry_time_perfect_leeway = 2 // the entire time, the parry is perfect
@@ -371,9 +373,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
. = ..()
quick_parry = !quick_parry
if(quick_parry)
- block_parry_data = /datum/block_parry_data/bokken/quick_parry
+ block_parry_data = quick_parry_data
else
- block_parry_data = /datum/block_parry_data/bokken
+ block_parry_data = default_parry_data
to_chat(user, "[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].")
/obj/item/melee/bokken/attackby(obj/item/I, mob/living/user, params)
@@ -410,6 +412,14 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
if(burnt)
. += " Burned into the \"blade\" is [burned_in]."
+/obj/item/melee/bokken/ironwood
+ name = "ironwood bokken"
+ desc = "A misnomer of sorts, this is effectively a blunt katana made from ironwood, a dense organic wood derived from ironcaps. Why ironwood? Druids can use it. Duh."
+ icon_state = "bokken_iron"
+ item_state = "bokken_iron"
+ force = 12
+ stamina_damage_increment = 3
+
/obj/item/melee/bokken/waki
name = "wakizashi bokken"
desc = "A space-Japanese training sword made of wood and shaped like a wakizashi."
@@ -417,26 +427,61 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
item_state = "wakibokken"
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
- force = 7
+ force = 6
stamina_damage_increment = 4
+ block_parry_data = /datum/block_parry_data/bokken/waki
+ default_parry_data = /datum/block_parry_data/bokken/waki
+ quick_parry_data = /datum/block_parry_data/bokken/waki/quick_parry
+
+/datum/block_parry_data/bokken/waki // weaker parries than the bigger variant, but cheaper and faster recovery, like quick parry
+ parry_stamina_cost = 4
+ parry_time_windup = 0
+ parry_time_active = 6
+ parry_time_spindown = 0
+ parry_time_perfect = 1.5
+ parry_time_perfect_leeway = 1
+ parry_imperfect_falloff_percent = 7.5
+ parry_efficiency_to_counterattack = 120
+ parry_efficiency_considered_successful = 65
+ parry_efficiency_perfect = 120
+ parry_efficiency_perfect_override = list(
+ TEXT_ATTACK_TYPE_PROJECTILE = 30,
+ )
+ parry_failed_stagger_duration = 2 SECONDS
+ parry_data = list(
+ PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.5, // 6*1.5 = 9, 7*1.5 = 10.5, 8*1.5 = 12, 9*1.5 = 13.5
+ )
+
+/datum/block_parry_data/bokken/waki/quick_parry //For the parry spammer in you
+ parry_stamina_cost = 2 // Slam that parry button
+ parry_time_active = 2.5
+ parry_time_perfect = 1
+ parry_time_perfect_leeway = 1
+ parry_failed_stagger_duration = 1 SECONDS
+ parry_failed_clickcd_duration = 1 SECONDS
+
+/datum/block_parry_data/bokken/waki/quick_parry/proj
+ parry_efficiency_perfect_override = list()
+
+/obj/item/melee/bokken/waki/ironwood
+ name = "wakizashi ironwood bokken"
+ desc = "A misnomer of sorts, this is effectively a blunt wakizashi made from ironwood, a dense organic wood derived from ironcaps. Why ironwood? Druids can use it. Duh."
+ icon_state = "wakibokken_iron"
+ item_state = "wakibokken_iron"
+ force = 8
+ stamina_damage_increment = 2
/obj/item/melee/bokken/debug
name = "funny debug parrying stick"
desc = "if you see this you've fucked up somewhere my good man"
block_parry_data = /datum/block_parry_data/bokken/debug
-
-/obj/item/melee/bokken/debug/AltClick(mob/user)
- quick_parry = !quick_parry
- if(quick_parry)
- block_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
- else
- block_parry_data = /datum/block_parry_data/bokken/debug
- to_chat(user, "[src] is now [quick_parry ? "emphasizing shorter parries, forcing you to riposte or be staggered" : "emphasizing longer parries, with a shorter window to riposte but more forgiving parries"].")
+ default_parry_data = /datum/block_parry_data/bokken/debug
+ quick_parry_data = /datum/block_parry_data/bokken/quick_parry/debug
/datum/block_parry_data/bokken/debug
parry_efficiency_perfect_override = list()
parry_data = list(
- PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
+ PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
PARRY_DISARM_ATTACKER = TRUE,
PARRY_KNOCKDOWN_ATTACKER = 10,
PARRY_STAGGER_ATTACKER = 10,
@@ -446,13 +491,63 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/datum/block_parry_data/bokken/quick_parry/debug
parry_efficiency_perfect_override = list()
parry_data = list(
- PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25
+ PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 10*2.5 = 25, 11*2.5 = 27.5, 12*2.5 = 30, 13*2.5 = 32.5
PARRY_DISARM_ATTACKER = TRUE,
PARRY_KNOCKDOWN_ATTACKER = 10,
PARRY_STAGGER_ATTACKER = 10,
PARRY_DAZE_ATTACKER = 10,
)
+/// BOKKEN CRAFTNG PIECES
+
+/obj/item/bokken_blade
+ name = "training bokken wooden blade"
+ desc = "The blade piece of a bokken katana."
+ icon = 'icons/obj/smith.dmi'
+ icon_state = "bokken"
+ item_state = "bone_dagger"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/bokken_ironblade
+ name = "training bokken ironwood blade"
+ desc = "The blade piece of a ironwood bokken katana."
+ icon = 'icons/obj/smith.dmi'
+ icon_state = "bokken_iron"
+ item_state = "switchblade_ext"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/wakibokken_blade
+ name = "training bokken wooden wakizashi blade"
+ desc = "The blade piece of a bokken wakizashi."
+ icon = 'icons/obj/smith.dmi'
+ icon_state = "wakibokken"
+ item_state = "bone_dagger"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/wakibokken_ironblade
+ name = "training bokken ironwood wakizashi blade"
+ desc = "The blade piece of a ironwood bokken katana."
+ icon = 'icons/obj/smith.dmi'
+ icon_state = "wakibokken_iron"
+ item_state = "switchblade_ext"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/bokken_hilt
+ name = "training bokken hilt"
+ desc = "The hilt piece of a bokken. This hilt is appropriate for any potential blade length or material."
+ icon = 'icons/obj/smith.dmi'
+ icon_state = "bokken_hilt"
+ item_state = "bone_dagger"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
/obj/item/wirerod
name = "wired rod"
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index 8594af8ec2..caa901a9fd 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index e27ac59f5e..c1404cb044 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi
index 31b70325da..ed34177c7b 100644
Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi
index 0852b02faa..9f59dbed06 100644
Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ
diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi
index e0bd7363dd..132da43d37 100644
Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index 3a0cd39338..dbcbd1aaa3 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi
index a40b9a2b19..cc53459266 100644
Binary files a/icons/obj/smith.dmi and b/icons/obj/smith.dmi differ