diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm
index 71a03b982ce..59ca1960d52 100644
--- a/code/game/objects/items/weapons/material/kitchen.dm
+++ b/code/game/objects/items/weapons/material/kitchen.dm
@@ -78,6 +78,17 @@
icon_state = "knife"
force_divisor = 0.1 // 6 when wielded with hardness 60 (steel)
+// Identical to the tactical knife but nowhere near as stabby.
+// Kind of like the toy esword compared to the real thing.
+/obj/item/weapon/material/kitchen/utensil/knife/boot
+ name = "boot knife"
+ desc = "A small fixed-blade knife for putting inside a boot."
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "tacknife"
+ item_state = "knife"
+ applies_material_colour = 0
+ unbreakable = 1
+
/obj/item/weapon/material/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50))
user << "You accidentally cut yourself with the [src]."
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 897d95f02f1..2bb84ef8c49 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -1104,6 +1104,12 @@ var/global/list/gear_datums = list()
sort_category = "misc"
cost = 1
+/datum/gear/boot_knife
+ display_name = "boot knife"
+ path = /obj/item/weapon/material/kitchen/utensil/knife/boot
+ sort_category = "misc"
+ cost = 3
+
/datum/gear/cane
display_name = "cane"
path = /obj/item/weapon/cane
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 593908f4cd2..681b33d6892 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -395,6 +395,9 @@ BLIND // can't see anything
body_parts_covered = FEET
slot_flags = SLOT_FEET
+ var/can_hold_knife
+ var/obj/item/holding
+
permeability_coefficient = 0.50
slowdown = SHOES_SLOWDOWN
force = 2
@@ -405,6 +408,54 @@ BLIND // can't see anything
"Resomi" = 'icons/mob/species/resomi/shoes.dmi',
)
+/obj/item/clothing/shoes/proc/draw_knife()
+ set name = "Draw Boot Knife"
+ set desc = "Pull out your boot knife."
+ set category = "IC"
+ set src in usr
+
+ if(usr.stat || usr.restrained() || usr.incapacitated())
+ return
+
+ holding.forceMove(get_turf(usr))
+
+ if(usr.put_in_hands(holding))
+ usr.visible_message("\The [usr] pulls a knife out of their boot!")
+ holding = null
+ else
+ usr << "Your need an empty, unbroken hand to do that."
+ holding.forceMove(src)
+
+ if(!holding)
+ verbs -= /obj/item/clothing/shoes/proc/draw_knife
+
+ update_icon()
+ return
+
+
+/obj/item/clothing/shoes/attackby(var/obj/item/I, var/mob/user)
+ if(can_hold_knife && istype(I, /obj/item/weapon/material/shard) || \
+ istype(I, /obj/item/weapon/material/butterfly) || \
+ istype(I, /obj/item/weapon/material/kitchen/utensil) || \
+ istype(I, /obj/item/weapon/material/hatchet/tacknife))
+ if(holding)
+ user << "\The [src] is already holding \a [holding]."
+ return
+ user.unEquip(I)
+ I.forceMove(src)
+ holding = I
+ user.visible_message("\The [user] shoves \the [I] into \the [src].")
+ verbs |= /obj/item/clothing/shoes/proc/draw_knife
+ update_icon()
+ else
+ return ..()
+
+/obj/item/clothing/shoes/update_icon()
+ overlays.Cut()
+ if(holding)
+ overlays += image(icon, "[icon_state]_knife")
+ return ..()
+
/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running)
return
diff --git a/code/modules/clothing/shoes/jobs.dm b/code/modules/clothing/shoes/jobs.dm
index 9610337906c..9e3bc0e2cfc 100644
--- a/code/modules/clothing/shoes/jobs.dm
+++ b/code/modules/clothing/shoes/jobs.dm
@@ -15,6 +15,7 @@
force = 3
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
siemens_coefficient = 0.7
+ can_hold_knife = 1
/obj/item/clothing/shoes/jackboots/unathi
name = "toe-less jackboots"
@@ -30,3 +31,4 @@
item_state = "workboots"
armor = list(melee = 40, bullet = 0, laser = 0, energy = 15, bomb = 20, bio = 0, rad = 20)
siemens_coefficient = 0.7
+ can_hold_knife = 1
\ No newline at end of file
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index df58a782ed6..dbbaacbe4b6 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ