diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 0383c3f1ee..a73545c685 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -247,6 +247,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\ new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \ new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\ + new/datum/stack_recipe("training bokken", /obj/item/melee/bokken, 10, time = 15),\ null, \ new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 56737cd1a9..104224d14c 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -249,6 +249,78 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 playsound(src, 'sound/weapons/bladeslice.ogg', 50, 1) return(BRUTELOSS) +/obj/item/melee/bokken // parrying stick + name = "bokken" + desc = "A space-Japanese training sword made of wood and shaped like a katana. Probably not relevant in D20." + icon_state = "bokken" + item_state = "bokken" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + force = 7 + throwforce = 10 + attack_verb = list("attacked", "smacked", "bashed", "smashed", "whacked") + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON + hitsound = 'sound/weapons/grenadelaunch.ogg' // no good wood thunk sounds + var/harm = TRUE // TRUE = brute, FALSE = stam + var/reinforced = FALSE + block_parry_data = /datum/block_parry_data/bokken + +/datum/block_parry_data/bokken // iteration 1: esword parry data + parry_time_windup = 0 + parry_time_active = 25 + parry_time_spindown = 0 + // we want to signal to players the most dangerous phase, the time when automatic counterattack is a thing. + parry_time_windup_visual_override = 1 + parry_time_active_visual_override = 3 + parry_time_spindown_visual_override = 12 + parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK // esword users can attack while + parry_time_perfect = 2.5 // first ds isn't perfect + parry_time_perfect_leeway = 1.5 + parry_imperfect_falloff_percent = 5 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 65 // VERY generous + parry_efficiency_perfect = 100 + parry_failed_stagger_duration = 4 SECONDS + parry_cooldown = 0.5 SECONDS + parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5) // 7 * 2.5 = 17.5 or 8 * 2.5 = 20. hopefully balanced by needing a parry and all that. + +/obj/item/melee/bokken/Initialize() + . = ..() + AddElement(/datum/element/sword_point) + +/obj/item/melee/bokken/attack_self(mob/user) + harm = !harm + if(harm) + damtype = BRUTE + else + damtype = STAMINA + to_chat(user, "[src] is now [harm ? "harmful" : "not quite as harmful"].") + +/obj/item/melee/bokken/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/pen)) + var/new_name = stripped_input(user, "What do you wish to name [src]?", "New Name", "bokken", 30) + if(new_name) + name = new_name + if(I.tool_behaviour == TOOL_WELDER) + var/burned_in = stripped_input(user, "What do you wish to burn into [src]?", "Burnt Inscription","", 140) + if(burned_in) + desc = initial(desc) + " Burned into the \"blade\" is [burned_in]." + icon_state += "_burnt" + item_state += "_burnt" + update_icon() + update_icon_state() + if(istype(I, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = I + if(!reinforced) + if(R.use(1)) + force++ + reinforced = TRUE + to_chat(user, "You slide a metal rod into [src]\'s hilt. It feels a little heftier in your hands.") + else + to_chat(user, "[src] already has a weight slid into the hilt.") + /obj/item/wirerod name = "wired rod" desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index ae2889e8a2..8097d243de 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( singular_name = "marker beacon" desc = "Prism-brand path illumination devices. Used by miners to mark paths and warn of danger." icon = 'icons/obj/lighting.dmi' - icon_state = "markerbronze" + icon_state = "marker" merge_type = /obj/item/stack/marker_beacon max_amount = 100 novariants = TRUE diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 00cffd9006..de10ef5c92 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 fd3016ac89..52ef75020c 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 1e48d57ac7..0ca36ad43d 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 5a5ee6f3db..59d7bbce69 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/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index cf7a87d28b..84bba1a578 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ