diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index a911d1e1375..3f2b1978d37 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -86,10 +86,13 @@ health-- check_health() -/obj/item/weapon/material/attackby(obj/item/weapon/W, mob/user as mob) +/obj/item/weapon/material/attackby(obj/item/weapon/W, mob/user) if(istype(W, /obj/item/weapon/whetstone)) var/obj/item/weapon/whetstone/whet = W repair(whet.repair_amount, whet.repair_time, user) + if(istype(W, /obj/item/weapon/material/sharpeningkit)) + var/obj/item/weapon/material/sharpeningkit/SK = W + repair(SK.repair_amount, SK.repair_time, user) ..() /obj/item/weapon/material/proc/check_health(var/consumed) @@ -134,7 +137,19 @@ to_chat(user, "You can't repair \the [src].") return - +/obj/item/weapon/material/proc/sharpen(var/material, var/sharpen_time, var/kit, mob/living/M) + if(!fragile) + if(health < initial(health)) + to_chat(M, "You should repair [src] first. Try using [kit] on it.") + return FALSE + M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].") + if(do_after(usr, sharpen_time)) + M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].") + src.set_material(material) + return TRUE + else + to_chat(M, "You can't sharpen and re-edge [src].") + return FALSE /* Commenting this out pending rebalancing of radiation based on small objects. @@ -162,4 +177,4 @@ Commenting this out pending rebalancing of radiation based on small objects. TemperatureAct(150) else return ..() -*/ \ No newline at end of file +*/ diff --git a/code/game/objects/items/weapons/material/whetstone.dm b/code/game/objects/items/weapons/material/whetstone.dm index e312680d1b0..628f450e3dc 100644 --- a/code/game/objects/items/weapons/material/whetstone.dm +++ b/code/game/objects/items/weapons/material/whetstone.dm @@ -8,4 +8,69 @@ force = 3 w_class = ITEMSIZE_SMALL var/repair_amount = 5 - var/repair_time = 40 \ No newline at end of file + var/repair_time = 40 + +/obj/item/weapon/whetstone/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/stack/material)) + var/obj/item/stack/material/M = I + if(M.amount >= 5) + to_chat(user, "You begin to refine the [src] with [M]...") + if(do_after(user, 70)) + M.use(5) + var/obj/item/SK + SK = new /obj/item/weapon/material/sharpeningkit(get_turf(user), M.material.name) + to_chat(user, "You sharpen and refine the [src] into \a [SK].") + qdel(src) + if(SK) + user.put_in_hands(SK) + else + to_chat(user, "You need 5 [src] to refine it into a sharpening kit.") + +/obj/item/weapon/material/sharpeningkit + name = "sharpening kit" + desc = "A refined, fine grit whetstone, useful for sharpening dull edges, polishing out dents, and, with extra material, replacing an edge." + icon = 'icons/obj/kitchen.dmi' + icon_state = "sharpener" + hitsound = 'sound/weapons/genhit3.ogg' + force_divisor = 0.7 + thrown_force_divisor = 1 + var/repair_amount = 5 + var/repair_time = 40 + var/sharpen_time = 100 + var/uses = 0 + +/obj/item/weapon/material/sharpeningkit/examine(mob/user, distance) + . = ..() + to_chat(user, "There [uses == 1 ? "is" : "are"] [uses] [material] [uses == 1 ? src.material.sheet_singular_name : src.material.sheet_plural_name] left for use.") +/obj/item/weapon/material/sharpeningkit/Initialize() + . = ..() + setrepair() + +/obj/item/weapon/material/sharpeningkit/proc/setrepair() + repair_amount = material.hardness * 0.1 + repair_time = material.weight * 0.5 + sharpen_time = material.weight * 3 + +/obj/item/weapon/material/sharpeningkit/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/stack/material)) + var/obj/item/stack/material/S = W + if(S.material == material) + S.use(1) + uses += 1 + to_chat(user, "You add a [S.material.name] [S.material.sheet_singular_name] to [src].") + return + + if(istype(W, /obj/item/weapon/material)) + if(istype(W, /obj/item/weapon/material/sharpeningkit)) + to_chat(user, "Really? Sharpening a [W] with [src]? You goofball.") + return + var/obj/item/weapon/material/M = W + if(uses >= M.w_class*2) + if(M.sharpen(src.material.name, sharpen_time, src, user)) + uses -= M.w_class*2 + return + else + to_chat(user, "Not enough material to sharpen [M]. You need [M.w_class*2] [M.material.sheet_plural_name].") + return + else + to_chat(user, "You can't sharpen [W] with [src]!") diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 92ac55f9666..6c5a251283c 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ