From 55b55bab347b64c46fe8ada143910df8ebdae1d6 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 16 Aug 2020 12:42:40 +1000 Subject: [PATCH] workies!! --- code/modules/smithing/anvil.dm | 52 ++++++++++----- code/modules/smithing/finished_items.dm | 45 +++++++++++-- code/modules/smithing/smithed_items.dm | 83 ++++++++++++++++-------- icons/obj/smith.dmi | Bin 481 -> 484 bytes 4 files changed, 128 insertions(+), 52 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 01736f03d0..2a8b476628 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -26,11 +26,12 @@ anchored = TRUE var/workpiece_state = FALSE var/datum/material/workpiece_material + var/anvilquality = 0 var/qualitymod = 0 var/currentquality = 0 var/currentsteps = 0 var/strengthstepcostmod = 1 - var/stepsdone = 0 + var/stepsdone = "" var/list/smithrecipes = list(RECIPE_AXE = /obj/item/smithing/axehead, RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, @@ -44,7 +45,9 @@ RECIPE_BROADSWORD = /obj/item/smithing/broadblade, RECIPE_HALBERD = /obj/item/smithing/halberdhead) - +/obj/structure/anvil/Initialize() + ..() + qualitymod = anvilquality /obj/structure/anvil/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/ingot)) @@ -64,8 +67,9 @@ return else if(istype(I, /obj/item/melee/smith/hammer)) var/obj/item/melee/smith/hammer/hammertime = I - if(workpiece_state == WORKPIECE_PRESENT || WORKPIECE_INPROGRESS) + if(workpiece_state == WORKPIECE_PRESENT || workpiece_state == WORKPIECE_INPROGRESS) do_shaping(user, hammertime.qualitymod) + return else to_chat(user, "You can't work an empty anvil!") return FALSE @@ -119,24 +123,38 @@ stepsdone += "u" currentsteps += 1 qualitymod -= 2 + to_chat(user, "You [stepdone] the metal.") + currentquality += qualitymod + to_chat(user, stepsdone) if(length(stepsdone) >= 3) - if(currentsteps > STEPS_CAP) - to_chat(user, "You overwork the metal, causing it to turn into useless slag!") + tryfinish(user) + +/obj/structure/anvil/proc/tryfinish(mob/user) + if(currentsteps > STEPS_CAP) + to_chat(user, "You overwork the metal, causing it to turn into useless slag!") + var/turf/T = get_turf(user) + workpiece_state = FALSE + new /obj/item/stack/ore/slag(T) + currentquality = 0 + qualitymod = anvilquality + stepsdone = "" + currentsteps = 0 + for(var/i in smithrecipes) + to_chat(user, "comparing [i] to [stepsdone]") + if(i == stepsdone) var/turf/T = get_turf(user) + var/obj/item/smithing/create = smithrecipes[stepsdone] + var/obj/item/smithing/finisheditem = new create(T) + to_chat(user, "You finish your [finisheditem]!") workpiece_state = FALSE - new /obj/item/stack/ore/slag(T) + finisheditem.quality = currentquality + finisheditem.set_custom_materials(workpiece_material) currentquality = qualitymod - for(var/solutions in smithrecipes) - if(!solutions == stepsdone) - return FALSE - else - var/obj/item/smithing/finisheditem = smithrecipes[stepsdone] - var/turf/T = get_turf(user) - workpiece_state = FALSE - finisheditem.set_custom_materials(workpiece_material) - to_chat(user, "You finish your [finisheditem]!") - new finisheditem(T) - currentquality = qualitymod + qualitymod = anvilquality + stepsdone = "" + currentsteps = 0 + break + #undef WORKPIECE_PRESENT #undef WORKPIECE_INPROGRESS diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 7aa7384036..7bd6f4e78e 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -4,6 +4,7 @@ icon_state = "mace_greyscale" item_state = "mace_greyscale" material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + force = 10 lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' var/quality @@ -12,13 +13,26 @@ /obj/item/melee/smith/Initialize() + ..() desc = "A handmade [name]." - . = ..() overlay = mutable_appearance(icon, overlay_state) overlay.appearance_flags = RESET_COLOR add_overlay(overlay) + if(force < 0) + force = 0 +/obj/item/melee/smith/twohand + var/wielded_mult = 1.75 + + +/obj/item/melee/smith/twohand/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. + AddComponent(/datum/component/jousting) + AddElement(/datum/element/sword_point) + var/fw = force*wielded_mult + AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=fw, icon_wielded="[icon_state]_wield") /////////////////////////// @@ -51,13 +65,21 @@ /////////////////////////// -/obj/item/melee/smith/halberd - - -/obj/item/melee/smith/javelin +/obj/item/melee/smith/twohand/halberd + name = "halberd" + +/obj/item/melee/smith/twohand/halberd/Initialize() + ..() + throwforce = force/3 +/obj/item/melee/smith/twohand/javelin + name = "javelin" + wielded_mult = 1.5 +/obj/item/melee/smith/twohand/javelin/Initialize() + ..() + throwforce = force*2 ////////////////////////// @@ -65,14 +87,23 @@ /////////////////////////// /obj/item/melee/smith/axe + name = "axe" /obj/item/melee/smith/hammer//blacksmithing, not warhammer. + name = "hammer" var/qualitymod = 0 -/obj/item/scythe/smithed //we need to inherit scythecode +/obj/item/scythe/smithed //we need to inherit scythecode, but that's about it. + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + /obj/item/melee/smith/cogheadclub + name = "coghead club" /obj/item/melee/smith/shortsword + name = "shortsword" -/obj/item/melee/smith/shortsword +/obj/item/melee/smith/twohand/broadsword + name = "broadsword" + force = 15 + wielded_mult = 1.8 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 3da44c90d3..84ba872460 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -1,3 +1,7 @@ + + + + /obj/item/smithing name = "base class /obj/item/smithing" icon = 'icons/obj/smith.dmi' @@ -5,7 +9,7 @@ material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX var/quality = 0 //quality. Changed by the smithing process. var/obj/item/finishingitem = /obj/item/stick //What this item needs to be hit by to create finalitem - var/obj/item/finalitem = /obj/item/melee/smith + var/obj/item/finalitem /obj/item/ingot name = "ingot" @@ -18,20 +22,22 @@ custom_materials = list(/datum/material/iron=12000) /obj/item/smithing/Initialize() + ..() desc = "A [src]. Hit it with a [finishingitem] to create a [finalitem]." + + /obj/item/smithing/attackby(obj/item/I, mob/user) if(istype(I, finishingitem)) - to_chat(user, "You finish the [src].") qdel(I) - dofinish() + startfinish() else return ..() +/obj/item/smithing/proc/startfinish() + dofinish() /obj/item/smithing/proc/dofinish() - var/turf/T = get_turf(src) - . = new finalitem(T) - finalitem.set_custom_materials(custom_materials) + visible_message("The finishing of [src].") var/qualname switch(quality) if(-1000 to -5) @@ -54,33 +60,39 @@ qualname = "above-average" var/datum/material/mat = custom_materials[1] mat = mat.name - finalitem.name = "[qualname] [mat] [finalitem.name]." + finalitem.name = "[qualname] [mat] [finalitem.name]" + finalitem.forceMove(get_turf(src)) qdel(src) - return + /obj/item/smithing/axehead name = "smithed axe head" finalitem = /obj/item/melee/smith/axe -/obj/item/smithing/axehead/dofinish() +/obj/item/smithing/axehead/startfinish() + finalitem = new /obj/item/melee/smith/axe(src) finalitem.force += quality ..() /obj/item/smithing/hammerhead name = "smithed hammer head" - var/obj/item/melee/smith/hammer/finalforreal = /obj/item/melee/smith/hammer + finalitem = /obj/item/melee/smith/hammer -/obj/item/smithing/hammerhead/dofinish() +/obj/item/smithing/hammerhead/startfinish() + var/obj/item/melee/smith/hammer/finalforreal = new /obj/item/melee/smith/hammer(src) finalforreal.force += quality/2 finalforreal.qualitymod = quality/4 finalitem = finalforreal ..() + + /obj/item/smithing/scytheblade name = "smithed scythe head" finalitem = /obj/item/scythe/smithed -/obj/item/smithing/scytheblade/dofinish() +/obj/item/smithing/scytheblade/startfinish() + finalitem = new /obj/item/scythe/smithed(src) finalitem.force += quality ..() @@ -88,16 +100,19 @@ name = "smithed shovel head" finalitem = /obj/item/shovel/smithed -/obj/item/smithing/shovelhead/dofinish() +/obj/item/smithing/shovelhead/startfinish() + finalitem = new /obj/item/shovel/smithed(src) finalitem.force += quality/2 - finalitem.toolspeed /= quality + if(quality) + finalitem.toolspeed /= quality ..() /obj/item/smithing/cogheadclubhead name = "smithed coghead club head" finalitem = /obj/item/melee/smith/cogheadclub -/obj/item/smithing/cogheadclubhead/dofinish() +/obj/item/smithing/cogheadclubhead/startfinish() + finalitem = new /obj/item/melee/smith/cogheadclub(src) finalitem.force += quality ..() @@ -105,17 +120,21 @@ name = "smithed javelin head" finalitem = /obj/item/melee/smith/javelin -/obj/item/smithing/javelinhead/dofinish() +/obj/item/smithing/javelinhead/startfinish() + finalitem = new /obj/item/melee/smith/javelin(src) finalitem.force += quality ..() + /obj/item/smithing/pickaxehead name = "smithed pickaxe head" - var/obj/item/pickaxe/smithed/finalforreal = /obj/item/pickaxe/smithed + finalitem = /obj/item/pickaxe/smithed -/obj/item/smithing/pickaxehead/dofinish() +/obj/item/smithing/pickaxehead/startfinish() + var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) finalforreal.force += quality/2 - finalforreal.toolspeed /= quality + if(quality) + finalforreal.toolspeed /= quality switch(quality) if(10 to INFINITY) finalforreal.digrange = 4 @@ -126,22 +145,27 @@ finalitem = finalforreal ..() + /obj/item/smithing/prospectingpickhead name = "smithed prospector's pickaxe head" - var/obj/item/mining_scanner/prospector/finalforreal = /obj/item/mining_scanner/prospector + finalitem = /obj/item/mining_scanner/prospector -/obj/item/smithing/prospectingpickhead/dofinish() +/obj/item/smithing/prospectingpickhead/startfinish() + var/obj/item/mining_scanner/prospector/finalforreal = new /obj/item/mining_scanner/prospector(src) finalforreal.range = 2 + quality - finalforreal.cooldown = 100/quality + if(quality) + finalforreal.cooldown = 100/quality finalitem = finalforreal ..() + /obj/item/smithing/shortswordblade name = "smithed shortsword blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/shortsword -/obj/item/smithing/shortswordblade/dofinish() +/obj/item/smithing/shortswordblade/startfinish() + finalitem = new /obj/item/melee/smith/shortsword(src) finalitem.force += quality ..() @@ -150,16 +174,18 @@ finishingitem = /obj/item/swordhandle finalitem = /obj/item/kitchen/knife -/obj/item/smithing/knifehead/dofinish() +/obj/item/smithing/knifehead/startfinish() + finalitem = new /obj/item/kitchen/knife(src) finalitem.force += quality/2 ..() /obj/item/smithing/broadblade name = "smithed broadsword blade" finishingitem = /obj/item/swordhandle - finalitem = /obj/item/melee/smith/shortsword + finalitem = /obj/item/melee/smith/broadsword -/obj/item/smithing/broadblade/dofinish() +/obj/item/smithing/broadblade/startfinish() + finalitem = new /obj/item/melee/smith/broadsword(src) finalitem.force += quality ..() @@ -167,7 +193,8 @@ name = "smithed halberd head" finalitem = /obj/item/melee/smith/halberd -/obj/item/smithing/halberdhead/dofinish() +/obj/item/smithing/halberdhead/startfinish() + finalitem = new /obj/item/melee/smith/halberd(src) finalitem.force += quality ..() @@ -182,4 +209,4 @@ name = "sword handle" desc = "It's a rod, suitable for use of a handle of a tool. Also could serve as a weapon, in a pinch." icon = 'icons/obj/smith.dmi' - icon_state = "stick" \ No newline at end of file + icon_state = "stick" diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index 1e28c69386db4e737014b4c05926d7145a584207..7a34789020437232cc3a16818b10883d6e5254ea 100644 GIT binary patch delta 278 zcmV+x0qOqX1LOmcFBw}`RlvZ&aY8YOR6#Wu4W(pDPAVM4T(M=5NUML`Nkl%uF0-&*ogh7riI2v>)Z85&j000_K ztTRgnX2}1mm6JC+2k38(;JBz0%=U*eaJg0rHlE;AEjX8fzIKA8C)hfIwIgV}pXdo- c?g)OM?osnJd_63_0RR9107*qoM6N<$g3fn$(f|Me delta 275 zcmV+u0qp+d1K|UZFB!nVz;Qw`h*Uu}7!9RlOHL{rTUS-HJ(n<%NUML@NklEZY<