diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index a2ae68aa8051..e9aa0424db53 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -51,6 +51,15 @@ category = CAT_WEAPONRY always_availible = FALSE +/datum/crafting_recipe/knifeboxing + name = "Knife-boxing Gloves" + result = /obj/item/clothing/gloves/knifeboxing + reqs = list(/obj/item/clothing/gloves/boxing = 1, + /obj/item/kitchen/knife = 2) + time = 100 + category = CAT_WEAPONRY + always_availible = FALSE + //Normal recipes /datum/crafting_recipe/pin_removal name = "Pin Removal" diff --git a/code/datums/martial/knifeboxing.dm b/code/datums/martial/knifeboxing.dm new file mode 100644 index 000000000000..d9d1f9fbeb8a --- /dev/null +++ b/code/datums/martial/knifeboxing.dm @@ -0,0 +1,56 @@ +/datum/martial_art/knifeboxing + name = "Knife-boxing" + +/datum/martial_art/knifeboxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + to_chat(A, "Can't disarm while knife-boxing!") + return TRUE + +/datum/martial_art/knifeboxing/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + to_chat(A, "Can't grab while knife-boxing!") + return TRUE + +/datum/martial_art/knifeboxing/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) + + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + + var/atk_verb = pick("left hook","right hook","straight punch") + + var/damage = rand(8, 12) + A.dna.species.punchdamagelow + if(!damage) + playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) + D.visible_message("[A] has attempted to [atk_verb] [D]!", \ + "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE) + log_combat(A, D, "attempted to punch (knifeboxing)") + return FALSE + + var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) + var/armor_block = D.run_armor_check(affecting, "melee") + + playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1) + + D.visible_message("[A] has [atk_verb]ed [D]!", \ + "[A] has [atk_verb]ed [D]!", null, COMBAT_MESSAGE_RANGE) + + D.apply_damage(damage, BRUTE, affecting, armor_block) + log_combat(A, D, "punched (knifeboxing") + return TRUE + +/obj/item/clothing/gloves/knifeboxing + var/datum/martial_art/knifeboxing/style = new + +/obj/item/clothing/gloves/knifeboxing/equipped(mob/user, slot) + if(!ishuman(user)) + return + if(slot == SLOT_GLOVES) + var/mob/living/carbon/human/H = user + style.teach(H,1) + return + +/obj/item/clothing/gloves/knifeboxing/dropped(mob/user) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H) + if(H.get_item_by_slot(SLOT_GLOVES) == src) + style.remove(H) + return diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 38696e8ea257..46ab299e2462 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -414,6 +414,6 @@ /obj/item/book/granter/crafting_recipe/weapons name = "makeshift weapons 101" desc = "A book filled with directions on how to make various weaponry." - crafting_recipe_types = list(/datum/crafting_recipe/baseball_bat, /datum/crafting_recipe/lance, /datum/crafting_recipe/makeshiftlasrifle) + crafting_recipe_types = list(/datum/crafting_recipe/baseball_bat, /datum/crafting_recipe/lance, /datum/crafting_recipe/knifeboxing, /datum/crafting_recipe/makeshiftlasrifle) icon_state = "bookCrafting" oneuse = TRUE diff --git a/code/modules/clothing/gloves/knifeboxing.dm b/code/modules/clothing/gloves/knifeboxing.dm new file mode 100644 index 000000000000..938e322bdae0 --- /dev/null +++ b/code/modules/clothing/gloves/knifeboxing.dm @@ -0,0 +1,7 @@ +/obj/item/clothing/gloves/knifeboxing + name = "knife gloves" + desc = "I'm here to punch people in the face with knives." + icon = 'icons/obj/clothing/gloves.dmi' + alternate_worn_icon = 'icons/mob/hands.dmi' + icon_state = "knife_boxing" + item_state = "knife_boxing" diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 09f743377fd1..d45561a4a9a1 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index ed85e9881518..a45ee1478716 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/yogstation.dme b/yogstation.dme index defadf94d226..741a67d7030f 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -515,6 +515,7 @@ #include "code\datums\looping_sounds\weather.dm" #include "code\datums\martial\boxing.dm" #include "code\datums\martial\cqc.dm" +#include "code\datums\martial\knifeboxing.dm" #include "code\datums\martial\krav_maga.dm" #include "code\datums\martial\mushpunch.dm" #include "code\datums\martial\plasma_fist.dm" @@ -1646,6 +1647,7 @@ #include "code\modules\clothing\suits\utility.dm" #include "code\modules\clothing\suits\wiz_robe.dm" #include "code\modules\clothing\under\_under.dm" +#include "code\modules\clothing\gloves\knifeboxing.dm" #include "code\modules\clothing\under\accessories.dm" #include "code\modules\clothing\under\color.dm" #include "code\modules\clothing\under\miscellaneous.dm"