From 1b0152eb484f2efce34266d17f41184e2d3a8ef8 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 14 Aug 2020 18:28:48 +1000 Subject: [PATCH 01/72] Create anvil.dm --- code/modules/smithing/anvil.dm | 97 ++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 code/modules/smithing/anvil.dm diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm new file mode 100644 index 0000000000..5de308a7fb --- /dev/null +++ b/code/modules/smithing/anvil.dm @@ -0,0 +1,97 @@ +#define WORKPIECE_PRESENT 1 +#define WORKPIECE_INPROGRESS 2 +#define WORKPIECE_FINISHED 3 +#define WORKPIECE_SLAG 5 + +#define RECIPE_SMALLPICK "dbp" //draw bend punch +#define RECIPE_LARGEPICK "ddbp" //draw draw bend punch +#define RECIPE_SHOVEL "dfup" //draw fold upset punch +#define RECIPE_SMALLKNIFE "sdd" //shrink draw draw +#define RECIPE_HAMMER "sfp" //shrink fold punch +#define RECIPE_AXE "ufp" //upset fold punch +#define RECIPE_SHORTSWORD "dff" //draw fold fold +#define RECIPE_JAVELIN "dbf" //draw bend fold +#define RECIPE_SCYTHE "bdf" //bend draw fold +#define RECIPE_COGHEAD "bsf" //bend shrink fold. +#define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw +#define RECIPE_HALBERD "duffp" //draw upset fold fold punch + +/obj/structure/anvil + name = "anvil" + desc = "Base class of anvil. This shouldn't exist, but is useable." + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "loom" + density = TRUE + anchored = TRUE + var/workpiece_state = FALSE + var/qualitymod = 0 + var/currentquality = qualitymod + var/currentsteps = 0 + var/strengthstepcostmod = 1 + var/stepsdone + var/list/recipes = (RECIPE_AXE, RECIPE_HAMMER, RECIPE_SCYTHE, RECIPE_SHOVEL, RECIPE_COGHEAD, RECIPE_JAVELIN, RECIPE_LARGEPICK, RECIPE_SMALLPICK, RECIPE_SHORTSWORD, RECIPE_SMALLKNIFE) + +/obj/structure/anvil/attackby(obj/item/I, mob/user) + if(istype(I, obj/item/ingot)) + var/obj/item/ingot/notsword = I + if(workpiece_state) + to_chat(user, "There's already a workpiece! Finish it or take it off.") + return FALSE + if(notsword.workability == "shapeable") + workpiece_state = WORKPIECE_PRESENT + to_chat(user, "You place the [notsword] on the [src].") + else + to_chat(user, "The ingot isn't workable yet!") + return FALSE + return + return ..() + +/obj/structure/anvil/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I, 5) + return TRUE + + +/obj/structure/anvil/proc/do_shaping(mob/user) + var/list/shapingsteps = ("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. + var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps + switch(stepdone) + if("weak hit") + currentsteps += 1 * strengthstepcostmod + strengthstepcostmod += 0.3 + qualitymod += 1 + if("strong hit") + currentsteps += 1.25 * strengthstepcostmod + strengthstepcostmod += 0.5 + qualitymod += 2 + if("heavy hit") + currentsteps += 1.5 * strengthstepcostmod + strengthstepcostmod += 0.7 + qualitymod += 3 + if("fold") + stepsdone += "f" + currentsteps += 1 + qualitymod -= 2 + if("draw") + stepsdone += "d" + currentsteps += 1 + qualitymod -= 2 + if("shrink") + stepsdone += "s" + currentsteps += 1 + qualitymod -= 2 + if("bend") + stepsdone += "b" + currentsteps += 1 + qualitymod -= 2 + if("punch") + stepsdone += "p" + currentsteps += 1 + qualitymod -= 2 + if("upset") + stepsdone += "u" + currentsteps += 1 + qualitymod -= 2 + if(length(stepsdone) >= 3) + //todo: TRYFINISHTHEPIECE + //TODO: CHECK IF IT'S TOO WORKED From 67fe32aa13c8bf2ad440b130b5420c789fdf5f7a Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 14 Aug 2020 19:10:29 +1000 Subject: [PATCH 02/72] www --- code/modules/smithing/anvil.dm | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 5de308a7fb..378641eaa1 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -16,6 +16,7 @@ #define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw #define RECIPE_HALBERD "duffp" //draw upset fold fold punch +#define STEPS_CAP 8 /obj/structure/anvil name = "anvil" desc = "Base class of anvil. This shouldn't exist, but is useable." @@ -29,7 +30,7 @@ var/currentsteps = 0 var/strengthstepcostmod = 1 var/stepsdone - var/list/recipes = (RECIPE_AXE, RECIPE_HAMMER, RECIPE_SCYTHE, RECIPE_SHOVEL, RECIPE_COGHEAD, RECIPE_JAVELIN, RECIPE_LARGEPICK, RECIPE_SMALLPICK, RECIPE_SHORTSWORD, RECIPE_SMALLKNIFE) + var/list/smithrecipes = (RECIPE_AXE, RECIPE_HAMMER, RECIPE_SCYTHE, RECIPE_SHOVEL, RECIPE_COGHEAD, RECIPE_JAVELIN, RECIPE_LARGEPICK, RECIPE_SMALLPICK, RECIPE_SHORTSWORD, RECIPE_SMALLKNIFE, RECIPE_BROADSWORD, RECIPE_HALBERD) /obj/structure/anvil/attackby(obj/item/I, mob/user) if(istype(I, obj/item/ingot)) @@ -44,6 +45,13 @@ to_chat(user, "The ingot isn't workable yet!") return FALSE return + else if(istype(I, obj/item/hammer)) + var/obj/item/hammer/hammertime = I + if(workpiece_state = WORKPIECE_PRESENT || WORKPIECE_INPROGRESS) + do_shaping(user, hammer.qualitymod) + else + to_chat(user, "You can't work an empty anvil!") + return FALSE return ..() /obj/structure/anvil/wrench_act(mob/living/user, obj/item/I) @@ -52,8 +60,10 @@ return TRUE -/obj/structure/anvil/proc/do_shaping(mob/user) +/obj/structure/anvil/proc/do_shaping(mob/user, var/qualitychange) + qualitymod += qualitychange var/list/shapingsteps = ("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. + workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps switch(stepdone) if("weak hit") @@ -93,5 +103,17 @@ currentsteps += 1 qualitymod -= 2 if(length(stepsdone) >= 3) - //todo: TRYFINISHTHEPIECE - //TODO: CHECK IF IT'S TOO WORKED + 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) + for(var/solutions in smithrecipes) + if(!solution == stepsdone) + return FALSE + else + var/finisheditem = smithrecipes[stepsdone] + var/turf/T = get_turf(user) + workpiece_state = FALSE + new finisheditem(T) + to_chat(user, "You finish your [finisheditem]!") From 87eec3a9eb2562bd231797da2c7fdd9a8bed6aa1 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 14 Aug 2020 19:17:09 +1000 Subject: [PATCH 03/72] weeee --- code/modules/smithing/anvil.dm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 378641eaa1..ba8459109e 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -30,7 +30,18 @@ var/currentsteps = 0 var/strengthstepcostmod = 1 var/stepsdone - var/list/smithrecipes = (RECIPE_AXE, RECIPE_HAMMER, RECIPE_SCYTHE, RECIPE_SHOVEL, RECIPE_COGHEAD, RECIPE_JAVELIN, RECIPE_LARGEPICK, RECIPE_SMALLPICK, RECIPE_SHORTSWORD, RECIPE_SMALLKNIFE, RECIPE_BROADSWORD, RECIPE_HALBERD) + var/list/smithrecipes = (RECIPE_AXE = obj/item/smithing/axehead, + RECIPE_HAMMER = obj/item/smithing/hammerhead, + RECIPE_SCYTHE = obj/item/smithing/scytheblade, + RECIPE_SHOVEL = obj/item/smithing/shovelhead, + RECIPE_COGHEAD = obj/item/smithing/cogheadclubhead, + RECIPE_JAVELIN = obj/item/smithing/javelinhead, + RECIPE_LARGEPICK = obj/item/smithing/pickaxehead, + RECIPE_SMALLPICK = obj/item/smithing/prospectingpickhead, + RECIPE_SHORTSWORD = obj/item/smithing/shortswordblade, + RECIPE_SMALLKNIFE = obj/item/smithing/knifeblade, + RECIPE_BROADSWORD = obj/item/smithing/broadblade, + RECIPE_HALBERD = obj/item/smithing/halberdhead) /obj/structure/anvil/attackby(obj/item/I, mob/user) if(istype(I, obj/item/ingot)) From 0bc79b82ebd3b73ad5252c3d06aeaf7c69068a62 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 14 Aug 2020 20:18:55 +1000 Subject: [PATCH 04/72] ABDCE --- .../mining/equipment/mineral_scanner.dm | 11 +++- code/modules/smithing/anvil.dm | 9 ++- code/modules/smithing/smithed_items.dm | 57 +++++++++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 code/modules/smithing/smithed_items.dm diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index 9ccb7c0efc..bd5ce44998 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -12,13 +12,14 @@ slot_flags = ITEM_SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 + var/range = 7 /obj/item/mining_scanner/attack_self(mob/user) if(!user.client) return if(current_cooldown <= world.time) current_cooldown = world.time + cooldown - mineral_scan_pulse(get_turf(user)) + mineral_scan_pulse(get_turf(user), range) //Debug item to identify all ore spread quickly /obj/item/mining_scanner/admin @@ -41,7 +42,7 @@ slot_flags = ITEM_SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 - var/range = 7 + /obj/item/t_scanner/adv_mining_scanner/lesser name = "automatic mining scanner" @@ -80,3 +81,9 @@ /obj/effect/temp_visual/mining_overlay/Initialize() . = ..() animate(src, alpha = 0, time = duration, easing = EASE_IN) + +/obj/item/mining_scanner/prospector + name = "prospector's pickaxe" + desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + icon = 'icons/obj/mining.dmi' + icon_state = "pickaxe" diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index ba8459109e..597e65c662 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -25,6 +25,7 @@ density = TRUE anchored = TRUE var/workpiece_state = FALSE + var/datum/material = workpiece_material var/qualitymod = 0 var/currentquality = qualitymod var/currentsteps = 0 @@ -44,20 +45,22 @@ RECIPE_HALBERD = obj/item/smithing/halberdhead) /obj/structure/anvil/attackby(obj/item/I, mob/user) - if(istype(I, obj/item/ingot)) - var/obj/item/ingot/notsword = I + if(istype(I, obj/item/smithing/ingot)) + var/obj/item/smithing/ingot/notsword = I if(workpiece_state) to_chat(user, "There's already a workpiece! Finish it or take it off.") return FALSE if(notsword.workability == "shapeable") workpiece_state = WORKPIECE_PRESENT + workpiece_material = notsword.custom_materials to_chat(user, "You place the [notsword] on the [src].") + qdel(notsword) else to_chat(user, "The ingot isn't workable yet!") return FALSE return else if(istype(I, obj/item/hammer)) - var/obj/item/hammer/hammertime = I + var/obj/item/melee/hammer/hammertime = I if(workpiece_state = WORKPIECE_PRESENT || WORKPIECE_INPROGRESS) do_shaping(user, hammer.qualitymod) else diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm new file mode 100644 index 0000000000..e6959e0183 --- /dev/null +++ b/code/modules/smithing/smithed_items.dm @@ -0,0 +1,57 @@ +/obj/item/smithing + name = "base class /obj/item/smithing" + desc = "A [src]." + 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 + +/obj/item/smithing/axehead + name = "smithed axe head" + finalitem = /obj/item/hatchet/smithed + +/obj/item/smithing/hammerhead + name = "smithed hammer head" + finalitem = /obj/item/melee/hammer + +/obj/item/smithing/scytheblade + name = "smithed scythe head" + finalitem = /obj/item/scythe/smithed + +/obj/item/smithing/shovelhead + name = "smithed shovel head" + finalitem = /obj/item/shovel/smithed + +/obj/item/smithing/cogheadclubhead + name = "smithed coghead club head" + finalitem = /obj/item/melee/cleric_mace/cogheadclub + +/obj/item/smithing/javelinhead + name = "smithed javelin head" + finalitem = /obj/item/spear/javelin + +/obj/item/smithing/pickaxehead + name = "smithed pickaxe head" + finalitem = /obj/item/pickaxe/smithed + +/obj/item/smithing/prospectingpickhead + name = "smithed prospector's pickaxe head" + finalitem = /obj/item/mining_scanner/prospector + +/obj/item/smithing/shortswordblade + name = "smithed shortsword blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/shortsword + +/obj/item/smithing/knifeblade + name = "smithed knife blade" + finishingitem = /obj/item/swordhandle + finalitem = + +/obj/item/smithing/broadblade + name = "smithed broadsword blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/broadsword + +/obj/item/smithing/halberdhead + name = "smithed halberd head" + finalitem = /obj/item/spear/halberd From 2ff1529df2031457eb17ac1b80d2a919788ff2ad Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 14 Aug 2020 21:02:00 +1000 Subject: [PATCH 05/72] ee --- code/modules/smithing/smithed_items.dm | 70 +++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e6959e0183..91e01c3e07 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -1,57 +1,123 @@ /obj/item/smithing name = "base class /obj/item/smithing" - desc = "A [src]." + desc = "A [src]. Hit it with a [finishingitem] to create a [finalitem]." 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 +/obj/item/smithing/attackby(obj/item/I, mob/user) + if(istype(I, finishingitem)) + to_chat(user, "You finish the [src].") + qdel(I) + dofinish() + else + return ..() + + +/obj/item/smithing/proc/dofinish() + var/turf/T = get_turf(src) + new finalitem(T) + qdel(src) + /obj/item/smithing/axehead name = "smithed axe head" finalitem = /obj/item/hatchet/smithed +/obj/item/smithing/axehead/dofinish() + finalitem.force += quality + ..() + /obj/item/smithing/hammerhead name = "smithed hammer head" finalitem = /obj/item/melee/hammer +/obj/item/smithing/hammerhead/dofinish() + finalitem.force += quality/2 + finalitem.qualitymod = quality/4 + ..() + /obj/item/smithing/scytheblade name = "smithed scythe head" finalitem = /obj/item/scythe/smithed +/obj/item/smithing/scytheblade/dofinish() + finalitem.force += quality + ..() + /obj/item/smithing/shovelhead name = "smithed shovel head" finalitem = /obj/item/shovel/smithed +/obj/item/smithing/shovelhead/dofinish() + finalitem.force += quality/2 + finalitem.toolspeed /= quality + ..() + /obj/item/smithing/cogheadclubhead name = "smithed coghead club head" finalitem = /obj/item/melee/cleric_mace/cogheadclub +/obj/item/smithing/cogheadclubhead/dofinish() + finalitem.force += quality + ..() + /obj/item/smithing/javelinhead name = "smithed javelin head" finalitem = /obj/item/spear/javelin +/obj/item/smithing/javelinhead/dofinish() + finalitem.force += quality + ..() + /obj/item/smithing/pickaxehead name = "smithed pickaxe head" finalitem = /obj/item/pickaxe/smithed +/obj/item/smithing/pickaxehead/dofinish() + finalitem.force += quality/2 + finalitem.toolspeed /= quality + ..() + /obj/item/smithing/prospectingpickhead name = "smithed prospector's pickaxe head" finalitem = /obj/item/mining_scanner/prospector +/obj/item/smithing/prospectingpickhead/dofinish() + finalitem.range = 2 + quality + finalitem.cooldown = 50/quality + ..() + /obj/item/smithing/shortswordblade name = "smithed shortsword blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/shortsword +/obj/item/smithing/shortswordblade/dofinish() + finalitem.force += quality + ..() + /obj/item/smithing/knifeblade name = "smithed knife blade" finishingitem = /obj/item/swordhandle - finalitem = + finalitem = /obj/item/kitchen/knife + +/obj/item/smithing/knifehead/dofinish() + finalitem.force += quality/2 + ..() /obj/item/smithing/broadblade name = "smithed broadsword blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/broadsword +/obj/item/smithing/broadblade/dofinish() + finalitem.force += quality + ..() + /obj/item/smithing/halberdhead name = "smithed halberd head" finalitem = /obj/item/spear/halberd + +/obj/item/smithing/halberdhead/dofinish() + finalitem.force += quality + ..() From 7ca4fa2f5599565f3cbe3437e0d5a731928ff7a5 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sat, 15 Aug 2020 17:09:12 +1000 Subject: [PATCH 06/72] compilies/?? --- .../items/stacks/sheets/sheet_types.dm | 1 + .../mining/equipment/mineral_scanner.dm | 8 +- code/modules/smithing/anvil.dm | 65 +++++++----- code/modules/smithing/finished_items.dm | 78 ++++++++++++++ code/modules/smithing/smithed_items.dm | 96 ++++++++++++++---- icons/obj/smith.dmi | Bin 0 -> 481 bytes tgstation.dme | 3 + 7 files changed, 200 insertions(+), 51 deletions(-) create mode 100644 code/modules/smithing/finished_items.dm create mode 100644 icons/obj/smith.dmi diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 5f6341ea21..83ba5612a4 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -121,6 +121,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("iron ingot", /obj/item/ingot/iron, 6, time = 100), \ )) /obj/item/stack/sheet/metal diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index bd5ce44998..b2cd840468 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -42,7 +42,7 @@ slot_flags = ITEM_SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 - + var/range = 7 /obj/item/t_scanner/adv_mining_scanner/lesser name = "automatic mining scanner" @@ -81,9 +81,3 @@ /obj/effect/temp_visual/mining_overlay/Initialize() . = ..() animate(src, alpha = 0, time = duration, easing = EASE_IN) - -/obj/item/mining_scanner/prospector - name = "prospector's pickaxe" - desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." - icon = 'icons/obj/mining.dmi' - icon_state = "pickaxe" diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 597e65c662..01736f03d0 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -20,33 +20,35 @@ /obj/structure/anvil name = "anvil" desc = "Base class of anvil. This shouldn't exist, but is useable." - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "loom" + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" density = TRUE anchored = TRUE var/workpiece_state = FALSE - var/datum/material = workpiece_material + var/datum/material/workpiece_material var/qualitymod = 0 - var/currentquality = qualitymod + var/currentquality = 0 var/currentsteps = 0 var/strengthstepcostmod = 1 - var/stepsdone - var/list/smithrecipes = (RECIPE_AXE = obj/item/smithing/axehead, - RECIPE_HAMMER = obj/item/smithing/hammerhead, - RECIPE_SCYTHE = obj/item/smithing/scytheblade, - RECIPE_SHOVEL = obj/item/smithing/shovelhead, - RECIPE_COGHEAD = obj/item/smithing/cogheadclubhead, - RECIPE_JAVELIN = obj/item/smithing/javelinhead, - RECIPE_LARGEPICK = obj/item/smithing/pickaxehead, - RECIPE_SMALLPICK = obj/item/smithing/prospectingpickhead, - RECIPE_SHORTSWORD = obj/item/smithing/shortswordblade, - RECIPE_SMALLKNIFE = obj/item/smithing/knifeblade, - RECIPE_BROADSWORD = obj/item/smithing/broadblade, - RECIPE_HALBERD = obj/item/smithing/halberdhead) + var/stepsdone = 0 + var/list/smithrecipes = list(RECIPE_AXE = /obj/item/smithing/axehead, + RECIPE_HAMMER = /obj/item/smithing/hammerhead, + RECIPE_SCYTHE = /obj/item/smithing/scytheblade, + RECIPE_SHOVEL = /obj/item/smithing/shovelhead, + RECIPE_COGHEAD = /obj/item/smithing/cogheadclubhead, + RECIPE_JAVELIN = /obj/item/smithing/javelinhead, + RECIPE_LARGEPICK = /obj/item/smithing/pickaxehead, + RECIPE_SMALLPICK = /obj/item/smithing/prospectingpickhead, + RECIPE_SHORTSWORD = /obj/item/smithing/shortswordblade, + RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade, + RECIPE_BROADSWORD = /obj/item/smithing/broadblade, + RECIPE_HALBERD = /obj/item/smithing/halberdhead) + + /obj/structure/anvil/attackby(obj/item/I, mob/user) - if(istype(I, obj/item/smithing/ingot)) - var/obj/item/smithing/ingot/notsword = I + if(istype(I, /obj/item/ingot)) + var/obj/item/ingot/notsword = I if(workpiece_state) to_chat(user, "There's already a workpiece! Finish it or take it off.") return FALSE @@ -54,15 +56,16 @@ workpiece_state = WORKPIECE_PRESENT workpiece_material = notsword.custom_materials to_chat(user, "You place the [notsword] on the [src].") + currentquality = qualitymod qdel(notsword) else to_chat(user, "The ingot isn't workable yet!") return FALSE return - else if(istype(I, obj/item/hammer)) - var/obj/item/melee/hammer/hammertime = I - if(workpiece_state = WORKPIECE_PRESENT || WORKPIECE_INPROGRESS) - do_shaping(user, hammer.qualitymod) + else if(istype(I, /obj/item/melee/smith/hammer)) + var/obj/item/melee/smith/hammer/hammertime = I + if(workpiece_state == WORKPIECE_PRESENT || WORKPIECE_INPROGRESS) + do_shaping(user, hammertime.qualitymod) else to_chat(user, "You can't work an empty anvil!") return FALSE @@ -76,7 +79,7 @@ /obj/structure/anvil/proc/do_shaping(mob/user, var/qualitychange) qualitymod += qualitychange - var/list/shapingsteps = ("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. + var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps switch(stepdone) @@ -122,12 +125,20 @@ var/turf/T = get_turf(user) workpiece_state = FALSE new /obj/item/stack/ore/slag(T) + currentquality = qualitymod for(var/solutions in smithrecipes) - if(!solution == stepsdone) + if(!solutions == stepsdone) return FALSE else - var/finisheditem = smithrecipes[stepsdone] + var/obj/item/smithing/finisheditem = smithrecipes[stepsdone] var/turf/T = get_turf(user) workpiece_state = FALSE - new finisheditem(T) + finisheditem.set_custom_materials(workpiece_material) to_chat(user, "You finish your [finisheditem]!") + new finisheditem(T) + currentquality = qualitymod + +#undef WORKPIECE_PRESENT +#undef WORKPIECE_INPROGRESS +#undef WORKPIECE_FINISHED +#undef WORKPIECE_SLAG diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm new file mode 100644 index 0000000000..7aa7384036 --- /dev/null +++ b/code/modules/smithing/finished_items.dm @@ -0,0 +1,78 @@ +/obj/item/melee/smith + name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit. + icon = 'icons/obj/smith.dmi' + icon_state = "mace_greyscale" + item_state = "mace_greyscale" + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + var/quality + var/overlay_state = "stick" + var/mutable_appearance/overlay + + +/obj/item/melee/smith/Initialize() + desc = "A handmade [name]." + . = ..() + overlay = mutable_appearance(icon, overlay_state) + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + + + + +/////////////////////////// +// Mining // +/////////////////////////// +/obj/item/mining_scanner/prospector + name = "prospector's pickaxe" + desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + icon = 'icons/obj/mining.dmi' + icon_state = "pickaxe" //todo:sprite + +/obj/item/pickaxe/smithed + name = "pickaxe" + desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + icon = 'icons/obj/mining.dmi' + icon_state = "pickaxe" + +/obj/item/shovel/smithed + name = "prospector's pickaxe" + desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + icon = 'icons/obj/mining.dmi' + icon_state = "pickaxe" + + + + + +/////////////////////////// +// Spears // +/////////////////////////// + + +/obj/item/melee/smith/halberd + + +/obj/item/melee/smith/javelin + + + + + +////////////////////////// +// Other Melee // +/////////////////////////// + +/obj/item/melee/smith/axe + +/obj/item/melee/smith/hammer//blacksmithing, not warhammer. + var/qualitymod = 0 + +/obj/item/scythe/smithed //we need to inherit scythecode + +/obj/item/melee/smith/cogheadclub + +/obj/item/melee/smith/shortsword + +/obj/item/melee/smith/shortsword diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 91e01c3e07..3da44c90d3 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -1,10 +1,24 @@ /obj/item/smithing name = "base class /obj/item/smithing" - desc = "A [src]. Hit it with a [finishingitem] to create a [finalitem]." + icon = 'icons/obj/smith.dmi' + icon_state = "unfinished" + 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 + var/obj/item/finalitem = /obj/item/melee/smith +/obj/item/ingot + name = "ingot" + icon = 'icons/obj/smith.dmi' + icon_state = "unfinished" + material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX + var/workability = "shapeable" + +/obj/item/ingot/iron + 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].") @@ -16,12 +30,37 @@ /obj/item/smithing/proc/dofinish() var/turf/T = get_turf(src) - new finalitem(T) + . = new finalitem(T) + finalitem.set_custom_materials(custom_materials) + var/qualname + switch(quality) + if(-1000 to -5) + qualname = "awful" + if(-1000 to -2) + qualname = "shoddy" + if(-1000 to 0) + qualname = "poor" + if(0) + qualname = "normal" + if(10 to INFINITY) + qualname = "legendary" + if(8,9) + qualname = "masterwork" + if(6,7) + qualname = "excellent" + if(4,5) + qualname = "good" + if(1,2,3) + qualname = "above-average" + var/datum/material/mat = custom_materials[1] + mat = mat.name + finalitem.name = "[qualname] [mat] [finalitem.name]." qdel(src) + return /obj/item/smithing/axehead name = "smithed axe head" - finalitem = /obj/item/hatchet/smithed + finalitem = /obj/item/melee/smith/axe /obj/item/smithing/axehead/dofinish() finalitem.force += quality @@ -29,11 +68,12 @@ /obj/item/smithing/hammerhead name = "smithed hammer head" - finalitem = /obj/item/melee/hammer + var/obj/item/melee/smith/hammer/finalforreal = /obj/item/melee/smith/hammer /obj/item/smithing/hammerhead/dofinish() - finalitem.force += quality/2 - finalitem.qualitymod = quality/4 + finalforreal.force += quality/2 + finalforreal.qualitymod = quality/4 + finalitem = finalforreal ..() /obj/item/smithing/scytheblade @@ -55,7 +95,7 @@ /obj/item/smithing/cogheadclubhead name = "smithed coghead club head" - finalitem = /obj/item/melee/cleric_mace/cogheadclub + finalitem = /obj/item/melee/smith/cogheadclub /obj/item/smithing/cogheadclubhead/dofinish() finalitem.force += quality @@ -63,7 +103,7 @@ /obj/item/smithing/javelinhead name = "smithed javelin head" - finalitem = /obj/item/spear/javelin + finalitem = /obj/item/melee/smith/javelin /obj/item/smithing/javelinhead/dofinish() finalitem.force += quality @@ -71,20 +111,29 @@ /obj/item/smithing/pickaxehead name = "smithed pickaxe head" - finalitem = /obj/item/pickaxe/smithed + var/obj/item/pickaxe/smithed/finalforreal = /obj/item/pickaxe/smithed /obj/item/smithing/pickaxehead/dofinish() - finalitem.force += quality/2 - finalitem.toolspeed /= quality + finalforreal.force += quality/2 + finalforreal.toolspeed /= quality + switch(quality) + if(10 to INFINITY) + finalforreal.digrange = 4 + if(5 to 9) + finalforreal.digrange = 3 + if(3,4) + finalforreal.digrange = 2 + finalitem = finalforreal ..() /obj/item/smithing/prospectingpickhead name = "smithed prospector's pickaxe head" - finalitem = /obj/item/mining_scanner/prospector + var/obj/item/mining_scanner/prospector/finalforreal = /obj/item/mining_scanner/prospector /obj/item/smithing/prospectingpickhead/dofinish() - finalitem.range = 2 + quality - finalitem.cooldown = 50/quality + finalforreal.range = 2 + quality + finalforreal.cooldown = 100/quality + finalitem = finalforreal ..() /obj/item/smithing/shortswordblade @@ -108,7 +157,7 @@ /obj/item/smithing/broadblade name = "smithed broadsword blade" finishingitem = /obj/item/swordhandle - finalitem = /obj/item/melee/smith/broadsword + finalitem = /obj/item/melee/smith/shortsword /obj/item/smithing/broadblade/dofinish() finalitem.force += quality @@ -116,8 +165,21 @@ /obj/item/smithing/halberdhead name = "smithed halberd head" - finalitem = /obj/item/spear/halberd + finalitem = /obj/item/melee/smith/halberd /obj/item/smithing/halberdhead/dofinish() finalitem.force += quality ..() + +/obj/item/stick + name = "wooden rod" + 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" + force = 7 + +/obj/item/swordhandle + 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 diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1e28c69386db4e737014b4c05926d7145a584207 GIT binary patch literal 481 zcmV<70UrK|P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DKW1sGe?PwGbOXA7|1u|;!G<_%uR)`;i^jW(lYZhi!)MF2r4Zu z$xP11rHV5nzofVzALIxl106#{9YZc<1y?^8u+sso;WnD7R_vVs007xZL_t(YiRF?p z4#F@DMQu^`@0&0nI00ql5{MNEAyx(sj-8^`g%C@Gp#pbF;+JQ~D$yi@r4P76w;osw zd52^HzxxQlF4*IF^C7wu4(FSO Date: Sun, 16 Aug 2020 12:42:40 +1000 Subject: [PATCH 07/72] 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< Date: Sun, 16 Aug 2020 14:04:56 +1000 Subject: [PATCH 08/72] wewwewe --- code/modules/smithing/anvil.dm | 8 ++++---- code/modules/smithing/finished_items.dm | 20 ++++++++++---------- code/modules/smithing/smithed_items.dm | 24 +++++++++++++++--------- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 2a8b476628..5ac705ee09 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -28,9 +28,9 @@ var/datum/material/workpiece_material var/anvilquality = 0 var/qualitymod = 0 - var/currentquality = 0 - var/currentsteps = 0 - var/strengthstepcostmod = 1 + var/currentquality = 0 //lolman? what the fuck do these vars do? + var/currentsteps = 0 //even i don't know + var/strengthstepcostmod = 1 //todo: document this shit var/stepsdone = "" var/list/smithrecipes = list(RECIPE_AXE = /obj/item/smithing/axehead, RECIPE_HAMMER = /obj/item/smithing/hammerhead, @@ -149,7 +149,7 @@ workpiece_state = FALSE finisheditem.quality = currentquality finisheditem.set_custom_materials(workpiece_material) - currentquality = qualitymod + currentquality = 0 qualitymod = anvilquality stepsdone = "" currentsteps = 0 diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 7bd6f4e78e..d0d115fca8 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -10,7 +10,8 @@ var/quality var/overlay_state = "stick" var/mutable_appearance/overlay - + var/wielded_mult = 1 + var/wield_force = 15 /obj/item/melee/smith/Initialize() ..() @@ -23,16 +24,15 @@ /obj/item/melee/smith/twohand - var/wielded_mult = 1.75 + wielded_mult = 1.75 -/obj/item/melee/smith/twohand/ComponentInitialize() - . = ..() +/obj/item/melee/smith/twohand/Initialize() + ..() 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") + AddComponent(/datum/component/two_handed, force_unwielded=force, force_wielded=wield_force, icon_wielded="[icon_state]_wield") /////////////////////////// @@ -46,15 +46,15 @@ /obj/item/pickaxe/smithed name = "pickaxe" - desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + desc = "A pickaxe." icon = 'icons/obj/mining.dmi' icon_state = "pickaxe" /obj/item/shovel/smithed - name = "prospector's pickaxe" - desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + name = "shovel" + desc = "A shovel." icon = 'icons/obj/mining.dmi' - icon_state = "pickaxe" + icon_state = "shovel" diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 84ba872460..a4b12002d8 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -118,11 +118,13 @@ /obj/item/smithing/javelinhead name = "smithed javelin head" - finalitem = /obj/item/melee/smith/javelin + finalitem = /obj/item/melee/smith/twohand/javelin /obj/item/smithing/javelinhead/startfinish() - finalitem = new /obj/item/melee/smith/javelin(src) - finalitem.force += quality + var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalitem = finalforreal ..() @@ -182,20 +184,24 @@ /obj/item/smithing/broadblade name = "smithed broadsword blade" finishingitem = /obj/item/swordhandle - finalitem = /obj/item/melee/smith/broadsword + finalitem = /obj/item/melee/smith/twohand/broadsword /obj/item/smithing/broadblade/startfinish() - finalitem = new /obj/item/melee/smith/broadsword(src) - finalitem.force += quality + var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalitem = finalforreal ..() /obj/item/smithing/halberdhead name = "smithed halberd head" - finalitem = /obj/item/melee/smith/halberd + finalitem = /obj/item/melee/smith/twohand/halberd /obj/item/smithing/halberdhead/startfinish() - finalitem = new /obj/item/melee/smith/halberd(src) - finalitem.force += quality + var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/halberd(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalitem = finalforreal ..() /obj/item/stick From c2f36c8fe445939ecaba4f7e4cd626d31f9dce4d Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 16 Aug 2020 17:03:57 +1000 Subject: [PATCH 09/72] sprites --- code/modules/smithing/anvil.dm | 4 +- code/modules/smithing/finished_items.dm | 66 ++++++++++++++++++------ code/modules/smithing/smithed_items.dm | 35 ++++++++++++- icons/obj/smith.dmi | Bin 484 -> 3210 bytes 4 files changed, 86 insertions(+), 19 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 5ac705ee09..3326049ff2 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -15,6 +15,7 @@ #define RECIPE_COGHEAD "bsf" //bend shrink fold. #define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw #define RECIPE_HALBERD "duffp" //draw upset fold fold punch +#define RECIPE_GLAIVE "usfp" //upset shrink fold punch #define STEPS_CAP 8 /obj/structure/anvil @@ -43,7 +44,8 @@ RECIPE_SHORTSWORD = /obj/item/smithing/shortswordblade, RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade, RECIPE_BROADSWORD = /obj/item/smithing/broadblade, - RECIPE_HALBERD = /obj/item/smithing/halberdhead) + RECIPE_HALBERD = /obj/item/smithing/halberdhead, + RECIPE_GLAIVE = /obj/item/smithing/glaivehead) /obj/structure/anvil/Initialize() ..() diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index d0d115fca8..aaadce5106 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -27,12 +27,11 @@ wielded_mult = 1.75 -/obj/item/melee/smith/twohand/Initialize() - ..() +/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) - AddComponent(/datum/component/two_handed, force_unwielded=force, force_wielded=wield_force, icon_wielded="[icon_state]_wield") + /////////////////////////// @@ -41,23 +40,47 @@ /obj/item/mining_scanner/prospector name = "prospector's pickaxe" desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." - icon = 'icons/obj/mining.dmi' + icon = 'icons/obj/smith.dmi' icon_state = "pickaxe" //todo:sprite +/obj/item/mining_scanner/prospector/Initialize() + ..() + desc = "A handmade [name]." + overlay = mutable_appearance(icon, "minihandle") + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 + /obj/item/pickaxe/smithed name = "pickaxe" desc = "A pickaxe." - icon = 'icons/obj/mining.dmi' + icon = 'icons/obj/smith.dmi' icon_state = "pickaxe" +/obj/item/pickaxe/smithed/Initialize() + ..() + desc = "A handmade [name]." + overlay = mutable_appearance(icon, "stick") + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 + /obj/item/shovel/smithed name = "shovel" desc = "A shovel." - icon = 'icons/obj/mining.dmi' + icon = 'icons/obj/smith.dmi' icon_state = "shovel" - - +/obj/item/shovel/smithed/Initialize() + ..() + desc = "A handmade [name]." + overlay = mutable_appearance(icon, "shovelhandle") + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 /////////////////////////// @@ -67,21 +90,32 @@ /obj/item/melee/smith/twohand/halberd name = "halberd" + icon_state = "halberd" + overlay_state = "spearhandle" -/obj/item/melee/smith/twohand/halberd/Initialize() - ..() - throwforce = force/3 - +/obj/item/melee/smith/twohand/halberd/ComponentInitialize() + . = ..() + AddComponent(/datum/component/jousting) /obj/item/melee/smith/twohand/javelin name = "javelin" + icon_state = "javelin" + overlay_state = "longhandle" wielded_mult = 1.5 -/obj/item/melee/smith/twohand/javelin/Initialize() - ..() - throwforce = force*2 +/obj/item/melee/smith/twohand/javelin/ComponentInitialize() + . = ..() + AddComponent(/datum/component/jousting) +/obj/item/melee/smith/twohand/glaive + name = "glaive" + icon_state = "glaive" + overlay_state = "longhandle" + +/obj/item/melee/smith/twohand/glaive/ComponentInitialize() + . = ..() + AddComponent(/datum/component/jousting) ////////////////////////// // Other Melee // /////////////////////////// diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index a4b12002d8..9fedb6124d 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -14,7 +14,7 @@ /obj/item/ingot name = "ingot" icon = 'icons/obj/smith.dmi' - icon_state = "unfinished" + icon_state = "ingot" material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX var/workability = "shapeable" @@ -69,6 +69,7 @@ name = "smithed axe head" finalitem = /obj/item/melee/smith/axe + /obj/item/smithing/axehead/startfinish() finalitem = new /obj/item/melee/smith/axe(src) finalitem.force += quality @@ -77,6 +78,7 @@ /obj/item/smithing/hammerhead name = "smithed hammer head" finalitem = /obj/item/melee/smith/hammer + icon_state = "hammer" /obj/item/smithing/hammerhead/startfinish() var/obj/item/melee/smith/hammer/finalforreal = new /obj/item/melee/smith/hammer(src) @@ -90,6 +92,7 @@ /obj/item/smithing/scytheblade name = "smithed scythe head" finalitem = /obj/item/scythe/smithed + icon_state = "scythe" /obj/item/smithing/scytheblade/startfinish() finalitem = new /obj/item/scythe/smithed(src) @@ -99,6 +102,7 @@ /obj/item/smithing/shovelhead name = "smithed shovel head" finalitem = /obj/item/shovel/smithed + icon_state = "shovel" /obj/item/smithing/shovelhead/startfinish() finalitem = new /obj/item/shovel/smithed(src) @@ -119,11 +123,14 @@ /obj/item/smithing/javelinhead name = "smithed javelin head" finalitem = /obj/item/melee/smith/twohand/javelin + icon_state = "javelin" /obj/item/smithing/javelinhead/startfinish() var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalforreal.throwforce = finalforreal.force*2 finalitem = finalforreal ..() @@ -131,6 +138,7 @@ /obj/item/smithing/pickaxehead name = "smithed pickaxe head" finalitem = /obj/item/pickaxe/smithed + icon_state = "pickaxe" /obj/item/smithing/pickaxehead/startfinish() var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) @@ -151,6 +159,7 @@ /obj/item/smithing/prospectingpickhead name = "smithed prospector's pickaxe head" finalitem = /obj/item/mining_scanner/prospector + icon_state = "minipick" /obj/item/smithing/prospectingpickhead/startfinish() var/obj/item/mining_scanner/prospector/finalforreal = new /obj/item/mining_scanner/prospector(src) @@ -165,6 +174,7 @@ name = "smithed shortsword blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/shortsword + icon_state = "gladius" /obj/item/smithing/shortswordblade/startfinish() finalitem = new /obj/item/melee/smith/shortsword(src) @@ -175,6 +185,7 @@ name = "smithed knife blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/kitchen/knife + icon_state = "dagger" /obj/item/smithing/knifehead/startfinish() finalitem = new /obj/item/kitchen/knife(src) @@ -185,25 +196,45 @@ name = "smithed broadsword blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/twohand/broadsword + icon_state = "broadsword" /obj/item/smithing/broadblade/startfinish() var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") finalitem = finalforreal ..() /obj/item/smithing/halberdhead name = "smithed halberd head" finalitem = /obj/item/melee/smith/twohand/halberd + icon_state = "halberd" /obj/item/smithing/halberdhead/startfinish() var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/halberd(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.throwforce = finalforreal.force/3 + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") finalitem = finalforreal ..() +/obj/item/smithing/glaivehead + name = "smithed glaive head" + finalitem = /obj/item/melee/smith/twohand/glaive + icon_state = "glaive" + +/obj/item/smithing/glaive/startfinish() + var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/glaive(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.throwforce = finalforreal.force + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalitem = finalforreal + ..() + + /obj/item/stick name = "wooden rod" desc = "It's a rod, suitable for use of a handle of a tool. Also could serve as a weapon, in a pinch." @@ -215,4 +246,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" + icon_state = "shorthilt" diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index 7a34789020437232cc3a16818b10883d6e5254ea..4893018b231d97d2b23055573315f4c6a70e97c0 100644 GIT binary patch literal 3210 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 w8|w+?XWiY6Mq_<{907*qoM6N<$f;S0A;Q#;t literal 484 zcmVV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DKW1sGe?PwGbOXA7|1u|;!G<_%uR)`;i^jW(lYZhi!)MF2r4Zu z$xP11rHV5nzofVzALIxl106#{9YZc<1y?^8u+sso;WnD7R_vVs007)cL_t(YiRF+n z4#F@DMQw>P+dToP#64ILoPaWN3dG2O5XZ(2D7aOKCBjgF+ac+Hd3Fjgi9$|A=A&76 zspyq=At717?mhzA$pM)k6#@1PUjWDff(sN{@L-0_HPPhR!Zs9h>5<8a3G=XI@}k6V z00Kseu>vGZWO-DnV Date: Sun, 16 Aug 2020 22:04:28 +1000 Subject: [PATCH 10/72] dix --- code/datums/materials/basemats.dm | 13 +++--- code/datums/skills/_skill_holder.dm | 2 +- code/datums/skills/blacksmithing.dm | 6 +++ code/modules/smithing/anvil.dm | 57 +++++++++++++------------ code/modules/smithing/finished_items.dm | 15 ++++++- code/modules/smithing/smithed_items.dm | 2 +- tgstation.dme | 1 + 7 files changed, 61 insertions(+), 35 deletions(-) create mode 100644 code/datums/skills/blacksmithing.dm diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 721af65449..2e9c8efab7 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -35,23 +35,24 @@ Unless you know what you're doing, only use the first three numbers. They're in value_per_unit = 0.025 beauty_modifier = 0.075 -///Slight force increase +///Slight force decrease. It's gold, it's soft as fuck. /datum/material/gold name = "gold" desc = "Gold" color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium - strength_modifier = 1.2 + strength_modifier = 0.8 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/gold value_per_unit = 0.0625 beauty_modifier = 0.15 armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 1.15, "energy" = 1.15, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1.1) -///Has no special properties +///Small force increase, for diamond swords /datum/material/diamond name = "diamond" desc = "Highly pressurized carbon" color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + strength_modifier = 1.1 alpha = 132 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/diamond @@ -106,6 +107,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bluespace crystal" desc = "Crystals with bluespace properties" color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + integrity_modifier = 0.2 //these things shatter when thrown. alpha = 200 categories = list(MAT_CATEGORY_ORE = TRUE) beauty_modifier = 0.5 @@ -139,7 +141,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "titanium" desc = "Titanium" color = "#b3c0c7" - strength_modifier = 1.3 + strength_modifier = 1.1 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/titanium value_per_unit = 0.0625 @@ -203,7 +205,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "adamantine" desc = "A powerful material made out of magic, I mean science!" color = "#6d7e8e" - strength_modifier = 1.5 + strength_modifier = 1.3 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/adamantine value_per_unit = 0.25 @@ -276,6 +278,7 @@ Unless you know what you're doing, only use the first three numbers. They're in desc = "Mir'ntrath barhah Nar'sie." color = "#3C3434" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + strength_modifier = 1.2 sheet_type = /obj/item/stack/sheet/runed_metal value_per_unit = 0.75 armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm index 73748417c3..83c95c6439 100644 --- a/code/datums/skills/_skill_holder.dm +++ b/code/datums/skills/_skill_holder.dm @@ -110,7 +110,7 @@ /** * Automatic skill increase, multiplied by skill affinity if existing. - * Only works if skill is numerical. + * Only works if skill is numerical or levelled.. */ /datum/mind/proc/auto_gain_experience(skill, value, maximum, silent = FALSE) if(!ispath(skill, /datum/skill)) diff --git a/code/datums/skills/blacksmithing.dm b/code/datums/skills/blacksmithing.dm new file mode 100644 index 0000000000..0bddae5562 --- /dev/null +++ b/code/datums/skills/blacksmithing.dm @@ -0,0 +1,6 @@ +/datum/skill/level/dorfy/blacksmithing + name = "Blacksmithing" + desc = "Making metal into fancy shapes using heat and force. Higher levels increase both your working speed at an anvil as well as the quality of your works." + name_color = COLOR_FLOORTILE_GRAY + skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE, SKILL_USE_TOOL, SKILL_TRAINING_TOOL) + ui_category = SKILL_UI_CAT_MISC diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 3326049ff2..7886b87225 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -17,7 +17,6 @@ #define RECIPE_HALBERD "duffp" //draw upset fold fold punch #define RECIPE_GLAIVE "usfp" //upset shrink fold punch -#define STEPS_CAP 8 /obj/structure/anvil name = "anvil" desc = "Base class of anvil. This shouldn't exist, but is useable." @@ -28,10 +27,9 @@ var/workpiece_state = FALSE var/datum/material/workpiece_material var/anvilquality = 0 - var/qualitymod = 0 var/currentquality = 0 //lolman? what the fuck do these vars do? var/currentsteps = 0 //even i don't know - var/strengthstepcostmod = 1 //todo: document this shit + var/outrightfailchance = 1 //todo: document this shit var/stepsdone = "" var/list/smithrecipes = list(RECIPE_AXE = /obj/item/smithing/axehead, RECIPE_HAMMER = /obj/item/smithing/hammerhead, @@ -49,7 +47,7 @@ /obj/structure/anvil/Initialize() ..() - qualitymod = anvilquality + currentquality = anvilquality /obj/structure/anvil/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/ingot)) @@ -61,7 +59,11 @@ workpiece_state = WORKPIECE_PRESENT workpiece_material = notsword.custom_materials to_chat(user, "You place the [notsword] on the [src].") - currentquality = qualitymod + currentquality = anvilquality + var/skillmod = 0 + if(user.mind.skill_holder) + skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/2 + currentquality += skillmod qdel(notsword) else to_chat(user, "The ingot isn't workable yet!") @@ -84,63 +86,64 @@ /obj/structure/anvil/proc/do_shaping(mob/user, var/qualitychange) - qualitymod += qualitychange + currentquality += qualitychange var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps switch(stepdone) if("weak hit") - currentsteps += 1 * strengthstepcostmod - strengthstepcostmod += 0.3 - qualitymod += 1 + currentsteps += 1 + outrightfailchance += 10 + currentquality += 1 if("strong hit") - currentsteps += 1.25 * strengthstepcostmod - strengthstepcostmod += 0.5 - qualitymod += 2 + currentsteps += 2 + outrightfailchance += 17.5 + currentquality += 2 if("heavy hit") - currentsteps += 1.5 * strengthstepcostmod - strengthstepcostmod += 0.7 - qualitymod += 3 + currentsteps += 3 + outrightfailchance += 25 + currentquality += 3 if("fold") stepsdone += "f" currentsteps += 1 - qualitymod -= 2 + currentquality -= 1 if("draw") stepsdone += "d" currentsteps += 1 - qualitymod -= 2 + currentquality -= 1 if("shrink") stepsdone += "s" currentsteps += 1 - qualitymod -= 2 + currentquality -= 1 if("bend") stepsdone += "b" currentsteps += 1 - qualitymod -= 2 + currentquality -= 1 if("punch") stepsdone += "p" currentsteps += 1 - qualitymod -= 2 + currentquality -= 1 if("upset") stepsdone += "u" currentsteps += 1 - qualitymod -= 2 + currentquality -= 1 to_chat(user, "You [stepdone] the metal.") - currentquality += qualitymod to_chat(user, stepsdone) if(length(stepsdone) >= 3) tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - if(currentsteps > STEPS_CAP) + if(currentsteps > 12 || (rng && prob(outrightfailchance)) 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 + currentquality = anvilquality stepsdone = "" currentsteps = 0 + outrightfailchance = 1 + if(user.mind.skill_holder) + user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE) for(var/i in smithrecipes) to_chat(user, "comparing [i] to [stepsdone]") if(i == stepsdone) @@ -151,10 +154,10 @@ workpiece_state = FALSE finisheditem.quality = currentquality finisheditem.set_custom_materials(workpiece_material) - currentquality = 0 - qualitymod = anvilquality + currentquality = anvilquality stepsdone = "" currentsteps = 0 + outrightfailchance = 1 break diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index aaadce5106..cb95ae11b8 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -1,3 +1,7 @@ +//TODO: OBTAILABILITY, ANVIL TYPES, HAMMER TYPES, INGOTS + + + /obj/item/melee/smith name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit. icon = 'icons/obj/smith.dmi' @@ -45,6 +49,7 @@ /obj/item/mining_scanner/prospector/Initialize() ..() + var/mutable_appearance/overlay desc = "A handmade [name]." overlay = mutable_appearance(icon, "minihandle") overlay.appearance_flags = RESET_COLOR @@ -61,6 +66,7 @@ /obj/item/pickaxe/smithed/Initialize() ..() desc = "A handmade [name]." + var/mutable_appearance/overlay overlay = mutable_appearance(icon, "stick") overlay.appearance_flags = RESET_COLOR add_overlay(overlay) @@ -76,6 +82,7 @@ /obj/item/shovel/smithed/Initialize() ..() desc = "A handmade [name]." + var/mutable_appearance/overlay overlay = mutable_appearance(icon, "shovelhandle") overlay.appearance_flags = RESET_COLOR add_overlay(overlay) @@ -125,6 +132,8 @@ /obj/item/melee/smith/hammer//blacksmithing, not warhammer. name = "hammer" + icon_state = "hammer" + overlay_state = "hammerhandle" var/qualitymod = 0 /obj/item/scythe/smithed //we need to inherit scythecode, but that's about it. @@ -135,9 +144,13 @@ name = "coghead club" /obj/item/melee/smith/shortsword - name = "shortsword" + name = "gladius" + icon_state = "gladius" + overlay_state = "gladiushilt" /obj/item/melee/smith/twohand/broadsword name = "broadsword" + icon_state = "broadsword" + overlay_state = "broadhilt" force = 15 wielded_mult = 1.8 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 9fedb6124d..ca12033447 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -226,7 +226,7 @@ icon_state = "glaive" /obj/item/smithing/glaive/startfinish() - var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/glaive(src) + var/obj/item/melee/smith/twohand/glaive/finalforreal = new /obj/item/melee/smith/twohand/glaive(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force diff --git a/tgstation.dme b/tgstation.dme index 8153b6617c..ac09c11fd3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -633,6 +633,7 @@ #include "code\datums\skills\_skill.dm" #include "code\datums\skills\_skill_holder.dm" #include "code\datums\skills\_skill_modifier.dm" +#include "code\datums\skills\blacksmithing.dm" #include "code\datums\skills\engineering.dm" #include "code\datums\skills\medical.dm" #include "code\datums\skills\modifiers\job.dm" From 09fc795f3b0d60a7f847fc141e52dd6ebe270837 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 17 Aug 2020 11:45:24 +1000 Subject: [PATCH 11/72] AnPrim --- .../crafting/recipes/recipes_misc.dm | 54 +++++++++++++- code/modules/smithing/anvil.dm | 69 +++++++++++++++++- code/modules/smithing/finished_items.dm | 63 +++++++++++++++- code/modules/smithing/smithed_items.dm | 17 ++++- icons/obj/smith.dmi | Bin 3210 -> 3268 bytes 5 files changed, 194 insertions(+), 9 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 0cb0547978..ee0a55c657 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -111,6 +111,26 @@ category = CAT_MISC always_availible = FALSE // Disabled til learned +/datum/crafting_recipe/tableanvil + name = "Table Anvil" + result = /obj/structure/anvil/obtainable/table + time = 300 + reqs = list(/obj/item/stack/sheet/metal = 4, + /obj/item/stack/rods = 2) + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + +/datum/crafting_recipe/sandvil + name = "Sandstone Anvil" + result = /obj/structure/anvil/obtainable/sandstone + time = 300 + reqs = list(/obj/item/stack/sheet/mineral/sandstone = 4) + tools = list(TOOL_CROWBAR) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + + /////////////////// //Tools & Storage// /////////////////// @@ -166,6 +186,17 @@ subcategory = CAT_TOOL category = CAT_MISC +/datum/crafting_recipe/toolboxhammer + name = "Toolbox Hammer" + result = /obj/item/melee/smith/hammer/toolbox + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + reqs = list(/obj/item/storage/toolbox = 1, + /obj/item/stack/sheet/metal = 4, + /obj/item/stack/rods = 2) + time = 40 + subcategory = CAT_TOOL + category = CAT_MISC + /datum/crafting_recipe/papersack name = "Paper Sack" result = /obj/item/storage/box/papersack @@ -324,7 +355,7 @@ result = /obj/item/toy/sword/cx subcategory = CAT_MISCELLANEOUS category = CAT_MISC - + /datum/crafting_recipe/catgirlplushie name = "Catgirl Plushie" reqs = list(/obj/item/toy/plush/hairball = 3) @@ -336,6 +367,27 @@ //Unsorted// //////////// + + +/datum/crafting_recipe/stick + name = "Stick" + time = 30 + reqs = list(/obj/item/stack/sheet/mineral/wood = 1) + tools = list(/obj/item/hatchet) + result = /obj/item/stick + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + + +/datum/crafting_recipe/swordhilt + name = "Sword Hilt" + time = 30 + reqs = list(/obj/item/stack/sheet/mineral/wood = 2) + tools = list(/obj/item/hatchet) + result = /obj/item/swordhandle + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + /datum/crafting_recipe/blackcarpet name = "Black Carpet" reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 7886b87225..80268bfa41 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -6,14 +6,21 @@ #define RECIPE_SMALLPICK "dbp" //draw bend punch #define RECIPE_LARGEPICK "ddbp" //draw draw bend punch #define RECIPE_SHOVEL "dfup" //draw fold upset punch -#define RECIPE_SMALLKNIFE "sdd" //shrink draw draw #define RECIPE_HAMMER "sfp" //shrink fold punch #define RECIPE_AXE "ufp" //upset fold punch + + +#define RECIPE_SMALLKNIFE "sdd" //shrink draw draw #define RECIPE_SHORTSWORD "dff" //draw fold fold -#define RECIPE_JAVELIN "dbf" //draw bend fold +#define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw +#define RECIPE_KATANA "fffff" //fold fold fold fold fold + + #define RECIPE_SCYTHE "bdf" //bend draw fold #define RECIPE_COGHEAD "bsf" //bend shrink fold. -#define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw + + +#define RECIPE_JAVELIN "dbf" //draw bend fold #define RECIPE_HALBERD "duffp" //draw upset fold fold punch #define RECIPE_GLAIVE "usfp" //upset shrink fold punch @@ -31,6 +38,7 @@ var/currentsteps = 0 //even i don't know var/outrightfailchance = 1 //todo: document this shit var/stepsdone = "" + var/rng = FALSE var/list/smithrecipes = list(RECIPE_AXE = /obj/item/smithing/axehead, RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, @@ -133,7 +141,7 @@ tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - if(currentsteps > 12 || (rng && prob(outrightfailchance)) + if(currentsteps > 12 || (rng && prob(outrightfailchance))) to_chat(user, "You overwork the metal, causing it to turn into useless slag!") var/turf/T = get_turf(user) workpiece_state = FALSE @@ -160,6 +168,59 @@ outrightfailchance = 1 break +/obj/structure/anvil/debugsuper + name = "super ultra epic anvil of debugging." + desc = "WOW. A DEBUG ITEM STRUCTURE. EPIC." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = 10 + outrightfailchance = 0 + +/obj/structure/anvil/obtainable + name = "anvil" + desc = "Base class of anvil. This shouldn't exist, but is useable." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = 0 + outrightfailchance = 5 + rng = TRUE + +/obj/structure/anvil/obtainable/table + name = "table anvil" + desc = "A slightly reinforced table. Good luck." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = -2 + + +/obj/structure/anvil/obtainable/table/do_shaping(mob/user, var/qualitychange) + if(prob(5)) + to_chat(user, "The [src] breaks under the strain!") + take_damage(max_integrity) + return FALSE + else + ..() + +/obj/structure/anvil/obtainable/sandstone + name = "sandstone brick anvil" + desc = "A big block of sandstone. Useable as an anvil." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = -1 + +/obj/structure/anvil/obtainable/basalt + name = "basalt brick anvil" + desc = "A big block of basalt. Useable as an anvil, better than sandstone. Igneous!" + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = -0.5 + +/obj/structure/anvil/obtainable/basic + name = "anvil" + desc = "An anvil. It's got wheels bolted to the bottom." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = 0 #undef WORKPIECE_PRESENT #undef WORKPIECE_INPROGRESS diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index cb95ae11b8..a03efc4496 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -1,9 +1,33 @@ //TODO: OBTAILABILITY, ANVIL TYPES, HAMMER TYPES, INGOTS +/* +sords: +broadsword [x] +gladius [x] +dirk [x] +zweihander [x] +sabre +rapier +scimitar +katana [x] +polearms: +halberd [x] +glaive [x] +javelin [x] +pike + +misc: +blacksmith's hammer [x] +scythe [x] +axe +coghead club +pickaxes [x] +*/ /obj/item/melee/smith name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit. + desc = "cringe" icon = 'icons/obj/smith.dmi' icon_state = "mace_greyscale" item_state = "mace_greyscale" @@ -19,7 +43,8 @@ /obj/item/melee/smith/Initialize() ..() - desc = "A handmade [name]." + if(desc == "cringe") + desc = "A handmade [name]." overlay = mutable_appearance(icon, overlay_state) overlay.appearance_flags = RESET_COLOR add_overlay(overlay) @@ -28,6 +53,7 @@ /obj/item/melee/smith/twohand + item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it. wielded_mult = 1.75 @@ -129,6 +155,7 @@ /obj/item/melee/smith/axe name = "axe" + item_flags = NEEDS_PERMIT /obj/item/melee/smith/hammer//blacksmithing, not warhammer. name = "hammer" @@ -142,9 +169,11 @@ /obj/item/melee/smith/cogheadclub name = "coghead club" + item_flags = NEEDS_PERMIT /obj/item/melee/smith/shortsword name = "gladius" + item_flags = NEEDS_PERMIT icon_state = "gladius" overlay_state = "gladiushilt" @@ -152,5 +181,35 @@ name = "broadsword" icon_state = "broadsword" overlay_state = "broadhilt" - force = 15 + force = 11 wielded_mult = 1.8 + +/obj/item/melee/smith/twohand/zweihander + name = "zweihander" + icon_state = "zweihander" + overlay_state = "zweihilt" + force = 4 + wielded_mult = 3 + +/obj/item/melee/smith/twohand/katana + name = "katana" + icon_state = "katana" + overlay_state = "katanahilt" + force = 7 + wielded_mult = 2 + item_flags = ITEM_CAN_PARRY | UNIQUE_RENAME //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. + block_parry_data = /datum/block_parry_data/captain_saber + +//unique hammers +/obj/item/melee/smith/hammer/toolbox + name = "toolbox hammer" + desc = "A metal filled toolbox on a stick. Useable as a really shitty hammer." + w_class = WEIGHT_CLASS_BULKY + icon_state = "toolbox" + overlay_state = "hammerhandle" + qualitymod = -2 + +/obj/item/melee/smith/hammer/debug + name = "debugging hammer" + desc = "A DEBUGGING HAMMER!! EPIC!!." + qualitymod = 10 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index ca12033447..e8c3c02378 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -23,7 +23,7 @@ /obj/item/smithing/Initialize() ..() - desc = "A [src]. Hit it with a [finishingitem] to create a [finalitem]." + desc = "A [src]. Hit it with a [finishingitem.name] to create a [finalitem.name]." /obj/item/smithing/attackby(obj/item/I, mob/user) @@ -234,6 +234,19 @@ finalitem = finalforreal ..() +/obj/item/smithing/katanablade + name = "smithed katana blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/twohand/katana + icon_state = "katana" + + +/obj/item/smithing/katanablade/startfinish() + var/obj/item/melee/smith/twohand/katana/finalforreal = new /obj/item/melee/smith/twohand/katana(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalitem = finalforreal /obj/item/stick name = "wooden rod" @@ -244,6 +257,6 @@ /obj/item/swordhandle 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." + desc = "It's a crudlely shaped wooden sword hilt." icon = 'icons/obj/smith.dmi' icon_state = "shorthilt" diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index 4893018b231d97d2b23055573315f4c6a70e97c0..e2a303112c383a3d67c372780f06b8b93a1a3d60 100644 GIT binary patch delta 2856 zcmV+@3)l3D8N?ZoBmtzcB})MbBOG%wjk+~YnUiw?RDX>@&xZg200DGTPE!Ct=GbNc z00B;VR9JLGWpiV4X>fFDZ*Bkpc$|%u&2GXl49CyyQ&ez86R=%(nT93~;}s^;q>V=! zSBYtXr(Z^=X*+;@i=|)uk-zQCtC!8&c2~W=Z_B~PgcPdh>gi!w79$#V*?3%+g|pZ? zo{Yr6Hh&*y5C-(KvM?A^wpV4*MCj~v{-utg!GOtGBch41KHQ=TN1S^4PGY@WtX7LZ z7ajP$jdFn6!?~kqMeqO&0px^7iiVm-1RZppjUv{1z(LNggW7&L2*%57>McYi>nXHK z^b-c_F(?by=ISW2L(d|)j|ArW`Z`qQ^fFphL4PW5J$TD37o9aXcuXpvKdeG@Fp)@> zXM_V>AO{yo18uA5;QGiOlAPh>PF3_Yiz*aDOA2N3mVwhvW$rDS+@ZPeBUlT_f z$A2f95MUt~z0#h6un{#vZ9{vak!!ED^`)(P_E0z}id+w(hi9wBm%|h3dyM?keP$O( zl$qz5-Dj6!{p2U2?96PwznN!dHj~*!h(s%8_vQC&KeRW{3DR~A>`8Asw0Cb12dRuz z0}6hzw5d0frY7WuT*@BMg6}26FrId4Kfv zogPOjt(pfqI`)U*H=W2@3}_wX_Vsn+05FIO$**n!(twITL<{H)koE7$YXD^n?57MU z`J*$?o6BPzU`vu;*#eXSHGdcbN(cE~Gk&3oAklFEH=yAUZb01xru8o;10_FYK*t}( zfZ{B@`%L-OW2m4EX!(r|G_Qpe27dzZI~so6fS%v@{XiCrA9H@?BF0xtgs|mkhAS*VGX0scATYr%1HGiGIXoWJc zLEc1D7}#*J*+Ra}jSS}V7p;&6e0V?boAI>Gz(#DnW*`?Ke@FvDY{HAJZ>?UoEC|tT zq|FRb)_*ty)FO}Gfd8#8LjJej=8vJ<)a)Fu{Ls>gBUB9hZ6#R;t-g8z#5=>mOf)3n zR2Uc>)EOumo#9|+C_0?LDt`)zKE2fJE7A*4*0{@_^Oe>~Aqyyl$Xuzv~J^#=U z>A*Jspj#@q$~4LEkPZ%JYz9yPy04BO900%L;0|o_7i1UErWYl@l-7Y|eu)3U0T;

Fy!d|4%8FtB7M|f}fhdNdAHwQ`P&T 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 From bb86003510d316be764109451c734c63a8635dbd Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 18 Aug 2020 10:04:52 +1000 Subject: [PATCH 12/72] w e w --- .../crafting/recipes/recipes_misc.dm | 16 ++++ code/datums/materials/basemats.dm | 1 + .../objects/items/stacks/sheets/mineral.dm | 8 ++ .../items/stacks/sheets/sheet_types.dm | 2 + code/modules/smithing/anvil.dm | 4 +- code/modules/smithing/furnace.dm | 47 ++++++++++++ code/modules/smithing/smithed_items.dm | 76 ++++++++++++++++--- tgstation.dme | 1 + 8 files changed, 145 insertions(+), 10 deletions(-) create mode 100644 code/modules/smithing/furnace.dm diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index ee0a55c657..e662fa795f 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -130,7 +130,23 @@ subcategory = CAT_MISCELLANEOUS category = CAT_MISC +/datum/crafting_recipe/basaltblock + name = "Sintered Basalt Block" + result = /obj/item/basaltblock + time = 200 + reqs = list(/obj/item/stack/ore/glass/basalt = 50) + tools = list(TOOL_WELDER) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC +/datum/crafting_recipe/basaltanvil + name = "Basalt Anvil" + result = /obj/structure/anvil/obtainable/sandstone + time = 200 + reqs = list(/obj/item/basaltblock = 5) + tools = list(TOOL_CROWBAR) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC /////////////////// //Tools & Storage// /////////////////// diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 2e9c8efab7..cd996d337c 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -289,6 +289,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bronze" desc = "Clock Cult? Never heard of it." color = "#92661A" + strength_modifier = 1.1 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/tile/bronze value_per_unit = 0.025 diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 7692278ba3..83ad9984c1 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -117,6 +117,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Core Statue", /obj/structure/statue/diamond/ai2, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("diamond brick", /obj/item/ingot/diamond, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/diamond/get_main_recipes() @@ -145,6 +146,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \ new/datum/stack_recipe("Nuke Statue", /obj/structure/statue/uranium/nuke, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Engineer Statue", /obj/structure/statue/uranium/eng, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("uranium ingot", /obj/item/ingot/uranium, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/uranium/get_main_recipes() @@ -177,6 +179,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("plasma ingot", /obj/item/ingot/plasma, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/plasma/get_main_recipes() @@ -221,6 +224,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("RD Statue", /obj/structure/statue/gold/rd, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \ new/datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("gold ingot", /obj/item/ingot/gold, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/gold/get_main_recipes() @@ -252,6 +256,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ new/datum/stack_recipe("Sec Officer Statue", /obj/structure/statue/silver/sec, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Sec Borg Statue", /obj/structure/statue/silver/secborg, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Med Borg Statue", /obj/structure/statue/silver/medborg, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("silver ingot", /obj/item/ingot/silver, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/silver/get_main_recipes() @@ -278,6 +283,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ GLOBAL_LIST_INIT(bananium_recipes, list ( \ new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("hilarious ingot", /obj/item/ingot/bananium, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/bananium/get_main_recipes() @@ -306,6 +312,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ GLOBAL_LIST_INIT(titanium_recipes, list ( \ new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ + new/datum/stack_recipe("titanic ingot", /obj/item/ingot/titanium, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/titanium/get_main_recipes() @@ -353,6 +360,7 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ */ GLOBAL_LIST_INIT(adamantine_recipes, list( new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=1, res_amount=1), + new/datum/stack_recipe("adamant ingot", /obj/item/ingot/adamantine, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/adamantine diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 83ba5612a4..7c17703ae2 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -556,6 +556,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("runic ingot", /obj/item/ingot/cult, 2, time = 100), \ )) /obj/item/stack/sheet/runed_metal @@ -680,6 +681,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ )) /obj/item/stack/tile/bronze diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 80268bfa41..8c3890eb00 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -51,7 +51,8 @@ RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade, RECIPE_BROADSWORD = /obj/item/smithing/broadblade, RECIPE_HALBERD = /obj/item/smithing/halberdhead, - RECIPE_GLAIVE = /obj/item/smithing/glaivehead) + RECIPE_GLAIVE = /obj/item/smithing/glaivehead, + RECIPE_KATANA = /obj/item/smithing/katanablade) /obj/structure/anvil/Initialize() ..() @@ -204,6 +205,7 @@ /obj/structure/anvil/obtainable/sandstone name = "sandstone brick anvil" desc = "A big block of sandstone. Useable as an anvil." + custom_materials = list(/datum/material/sandstone=8000) icon = 'icons/obj/smith.dmi' icon_state = "anvil" anvilquality = -1 diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm new file mode 100644 index 0000000000..205ccd189d --- /dev/null +++ b/code/modules/smithing/furnace.dm @@ -0,0 +1,47 @@ +/obj/structure/furnace + name = "furnace" + desc = "A furnace." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + density = TRUE + anchored = TRUE + var/debug = FALSE //debugging only + var/working = TRUE + var/fueluse = 1 + + +/obj/structure/furnace/Initialize() + ..() + create_reagents(250, TRANSPARENT) + START_PROCESSING(SSobj, src) + +/obj/structure/furnace/Destroy() + ..() + STOP_PROCESSING(SSobj, src) + +/obj/structure/furnace/process() + if(debug) + reagents.add_reagent(/datum/reagent/fuel, 1) + return TRUE + if(reagents.remove_reagent(/datum/reagent/fuel, fueluse)) + working = TRUE + else + working = FALSE +/obj/structure/furnace/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/ingot)) + var/obj/item/ingot/notsword = I + if(working) + to_chat(user, "You heat the [notsword] in the [src].") + else + to_chat(user, "The furnace isn't working!.") + else + ..() + +/obj/structure/furnace/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I, 5) + return TRUE + +/obj/structure/furnace/infinite + name = "fuelless furnace" + debug = TRUE diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e8c3c02378..a41c938482 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -1,5 +1,8 @@ - - +/obj/item/basaltblock + name = "basalt block" + desc = "A block of basalt." + icon = 'icons/obj/smith.dmi' + icon_state = "unfinished" /obj/item/smithing @@ -16,11 +19,66 @@ icon = 'icons/obj/smith.dmi' icon_state = "ingot" material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX - var/workability = "shapeable" + var/workability = "cold" + + +/obj/item/ingot/on_attack_hand(mob/user) + var/mob/living/carbon/human/H + if(!workability == "shapeable") + return ..() + var/prot = 0 + if(ishuman(user)) + H = user + if(H.gloves) + var/obj/item/clothing/gloves/G = H.gloves + if(G.max_heat_protection_temperature) + prot = (G.max_heat_protection_temperature > 360) + else + prot = 1 + if(prot > 0 || HAS_TRAIT(user, TRAIT_RESISTHEAT) || HAS_TRAIT(user, TRAIT_RESISTHEATHANDS)) + to_chat(user, "You pick up the [src].") + return ..() + else + to_chat(user, "You try to move the [src], but you burn your hand on it!") + if(H) + var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + H.update_damage_overlays() /obj/item/ingot/iron custom_materials = list(/datum/material/iron=12000) +/obj/item/ingot/diamond + custom_materials = list(/datum/material/diamond=12000) //yeah ok + +/obj/item/ingot/uranium + custom_materials = list(/datum/material/uranium=12000) + +/obj/item/ingot/plasma + custom_materials = list(/datum/material/plasma=12000)//yeah ok + +/obj/item/ingot/gold + custom_materials = list(/datum/material/gold=12000) + +/obj/item/ingot/silver + custom_materials = list(/datum/material/silver=12000) + +/obj/item/ingot/bananium + custom_materials = list(/datum/material/bananium=12000) + +/obj/item/ingot/titanium + custom_materials = list(/datum/material/titanium=12000) + +/obj/item/ingot/adamantine + custom_materials = list(/datum/material/adamantine=12000) + +/obj/item/ingot/cult + custom_materials = list(/datum/material/runedmetal=12000) + +/obj/item/ingot/bronze + custom_materials = list(/datum/material/bronze=12000) + + /obj/item/smithing/Initialize() ..() desc = "A [src]. Hit it with a [finishingitem.name] to create a [finalitem.name]." @@ -129,7 +187,7 @@ var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult - finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalforreal.throwforce = finalforreal.force*2 finalitem = finalforreal ..() @@ -202,7 +260,7 @@ var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult - finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal ..() @@ -216,7 +274,7 @@ finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force/3 - finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal ..() @@ -230,7 +288,7 @@ finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force - finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal ..() @@ -239,13 +297,13 @@ finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/twohand/katana icon_state = "katana" - + /obj/item/smithing/katanablade/startfinish() var/obj/item/melee/smith/twohand/katana/finalforreal = new /obj/item/melee/smith/twohand/katana(src) finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult - finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]_wield") + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal /obj/item/stick diff --git a/tgstation.dme b/tgstation.dme index ac09c11fd3..5ed22d673e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3263,6 +3263,7 @@ #include "code\modules\shuttle\shuttle_creation\shuttle_upgrades.dm" #include "code\modules\smithing\anvil.dm" #include "code\modules\smithing\finished_items.dm" +#include "code\modules\smithing\furnace.dm" #include "code\modules\smithing\smithed_items.dm" #include "code\modules\spells\spell.dm" #include "code\modules\spells\spell_types\aimed.dm" From 93fa8b72b89aa061cec7d9cfb206d2a84d013e4e Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 18 Aug 2020 10:05:54 +1000 Subject: [PATCH 13/72] w e w --- code/modules/smithing/furnace.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm index 205ccd189d..1046b40dae 100644 --- a/code/modules/smithing/furnace.dm +++ b/code/modules/smithing/furnace.dm @@ -32,6 +32,7 @@ var/obj/item/ingot/notsword = I if(working) to_chat(user, "You heat the [notsword] in the [src].") + notsword.workability = "shapeable" else to_chat(user, "The furnace isn't working!.") else From 8f5078a15a601e67c01840314de56661540d615b Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 18 Aug 2020 14:47:47 +1000 Subject: [PATCH 14/72] Update mineral.dm --- code/game/objects/items/stacks/sheets/mineral.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 83ad9984c1..426958b99a 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -117,7 +117,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Core Statue", /obj/structure/statue/diamond/ai2, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("diamond brick", /obj/item/ingot/diamond, 6, time = 100), \ +// new/datum/stack_recipe("diamond brick", /obj/item/ingot/diamond, 6, time = 100), \ not yet )) /obj/item/stack/sheet/mineral/diamond/get_main_recipes() @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("plasma ingot", /obj/item/ingot/plasma, 6, time = 100), \ +// new/datum/stack_recipe("plasma ingot", /obj/item/ingot/plasma, 6, time = 100), \ no )) /obj/item/stack/sheet/mineral/plasma/get_main_recipes() From 8085ab01d96650e082beecbb36c2c8481fb2d92d Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 18 Aug 2020 15:38:59 +1000 Subject: [PATCH 15/72] culst! --- .../items/stacks/sheets/sheet_types.dm | 5 +++ .../antagonists/cult/cult_structures.dm | 9 ++++- code/modules/smithing/anvil.dm | 36 +++++++++++++++++ code/modules/smithing/finished_items.dm | 40 +++++++++++++++++++ code/modules/smithing/furnace.dm | 10 +++++ code/modules/smithing/smithed_items.dm | 4 ++ 6 files changed, 103 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 7c17703ae2..40cef1d2fd 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -556,7 +556,9 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("anvil", /obj/structure/anvil/obtainable/narsie, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("runic ingot", /obj/item/ingot/cult, 2, time = 100), \ + new/datum/stack_recipe("rune smith's hammer", /obj/item/melee/smith/hammer/narsie, 6), \ )) /obj/item/stack/sheet/runed_metal @@ -619,6 +621,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("brass bar stool", /obj/structure/chair/stool/bar/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass stool", /obj/structure/chair/stool/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass anvil", /obj/structure/anvil/obtainable/ratvar, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ null, \ new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("sender - mech sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ @@ -630,6 +633,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \ null, \ new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/bottle/holyoil/empty), \ + new/datum/stack_recipe("brass smith's hammer", /obj/item/melee/smith/hammer/ratvar, 6), \ + new/datum/stack_recipe("brass ingot", /obj/item/ingot/bronze/ratvar, 6, time = 100), \ )) /obj/item/stack/tile/brass diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 5803941f36..a388621c92 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -174,7 +174,14 @@ new reward(get_turf(src)) to_chat(user, "You work the forge as dark knowledge guides your hands, creating the [choice]!") - +/obj/structure/destructible/cult/forge/attackby(obj/item/I, mob/user) + if(!iscultist(user)) + to_chat(user, "The heat radiating from [src] pushes you back.") + return + if(istype(I, /obj/item/ingot)) + var/obj/item/ingot/notsword = I + to_chat(user, "You heat the [notsword] in the [src].") + notsword.workability = "shapeable" /obj/structure/destructible/cult/pylon name = "pylon" diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 8c3890eb00..9bec834e29 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -202,6 +202,14 @@ else ..() +/obj/structure/anvil/obtainable/bronze + name = "slab of bronze" + desc = "A big block of bronze. Useable as an anvil." + custom_materials = list(/datum/material/bronze=8000) + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = -1 + /obj/structure/anvil/obtainable/sandstone name = "sandstone brick anvil" desc = "A big block of sandstone. Useable as an anvil." @@ -224,6 +232,34 @@ icon_state = "anvil" anvilquality = 0 +/obj/structure/anvil/obtainable/ratvar + name = "brass anvil" + desc = "A big block of what appears to be brass. Useable as an anvil, if whatever's holding the brass together lets you." + custom_materials = list(/datum/material/bronze=8000) + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = 1 + +/obj/structure/anvil/obtainable/ratvar/attackby(obj/item/I, mob/user) + if(is_servant_of_ratvar(user)) + return ..() + else + to_chat(user, "KNPXWN, QNJCQNW!") //rot13 then rot22 if anyone wants to decode + +/obj/structure/anvil/obtainable/narsie + name = "runic anvil" + desc = "An anvil made of a strange, runic metal." + custom_materials = list(/datum/material/runedmetal=8000) + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + anvilquality = 1 + +/obj/structure/anvil/obtainable/narsie/attackby(obj/item/I, mob/user) + if(iscultistr(user)) + return ..() + else + to_chat(user, "That is not yours to use!") + #undef WORKPIECE_PRESENT #undef WORKPIECE_INPROGRESS #undef WORKPIECE_FINISHED diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index a03efc4496..45ce53d630 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -209,6 +209,46 @@ pickaxes [x] overlay_state = "hammerhandle" qualitymod = -2 +/obj/item/melee/smith/hammer/narsie + name = "runemetal hammer" + custom_materials = list(datum/material/runedmetal = 12000) + desc = "A metal hammer inscribed with geometeric runes." + qualitymod = 1 + +/obj/item/melee/smith/hammer/narsie(mob/living/target, mob/living/carbon/human/user) + if(!iscultist(user)) + user.DefaultCombatKnockdown(100) + user.dropItemToGround(src, TRUE) + user.visible_message("A powerful force shoves [user] away from [target]!", \ + "\"You shouldn't be touching tools that aren't yours.\"") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + else + user.adjustBruteLoss(rand(force/2,force)) + return + ..() + +/obj/item/melee/smith/hammer/ratvar + name = "brass hammer" + custom_materials = list(datum/material/bronze = 12000) + desc = "A brass hammer inscribed with... writing? You can't read it." + qualitymod = 1 + +/obj/item/melee/smith/hammer/ratvar(mob/living/target, mob/living/carbon/human/user) + if(!is_servant_of_ratvar(user)) + user.DefaultCombatKnockdown(100) + user.dropItemToGround(src, TRUE) + user.visible_message("A powerful force shoves [user] away from [target]!", \ + "\""You shouldn't be touching tools that aren't yours.\"") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + else + user.adjustBruteLoss(rand(force/2,force)) + return + ..() + /obj/item/melee/smith/hammer/debug name = "debugging hammer" desc = "A DEBUGGING HAMMER!! EPIC!!." diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm index 1046b40dae..4cc647353c 100644 --- a/code/modules/smithing/furnace.dm +++ b/code/modules/smithing/furnace.dm @@ -27,6 +27,7 @@ working = TRUE else working = FALSE + /obj/structure/furnace/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/ingot)) var/obj/item/ingot/notsword = I @@ -46,3 +47,12 @@ /obj/structure/furnace/infinite name = "fuelless furnace" debug = TRUE + + +/obj/structure/furnace/infinite/ratvar + name = "brass furnace" + desc = "A brass furnace. Powered by... something, but seems otherwise safe." //todo:sprites they're safe for noncultists because you're just putting ingots in them. also there';s a reason to steal them ig + +/obj/structure/furnace/infinite/narsie + name = "rune furnace" + desc = "A runed furnace. Powered by... something, but seems otherwise safe."//todo:sprites diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index a41c938482..8fa8e8e167 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -78,6 +78,10 @@ /obj/item/ingot/bronze custom_materials = list(/datum/material/bronze=12000) +/obj/item/ingot/bronze/ratvar + material_flags = MATERIAL_COLOR + name = "brass ingnot" + desc = "On closer inspection, what appears to be wholly-unsuitable-for-smithing brass is actually more structurally stable bronze. Ratvar must have transformed the brass into bronze. Somehow." /obj/item/smithing/Initialize() ..() From 1146ed0d1fdc977d198c5c5ed87441817474c0b9 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 13:12:51 +1000 Subject: [PATCH 16/72] is thsi it --- code/modules/smithing/finished_items.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 45ce53d630..1c8711aa2b 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -239,8 +239,7 @@ pickaxes [x] if(!is_servant_of_ratvar(user)) user.DefaultCombatKnockdown(100) user.dropItemToGround(src, TRUE) - user.visible_message("A powerful force shoves [user] away from [target]!", \ - "\""You shouldn't be touching tools that aren't yours.\"") + user.visible_message("A powerful force shoves [user] away from [target]!", "\""You shouldn't be touching tools that aren't yours.\"") if(ishuman(user)) var/mob/living/carbon/human/H = user H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) From 2a3ada511e058d38e6ddc832657d2e44a32ce43c Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 16:51:55 +1000 Subject: [PATCH 17/72] It's all codersprites? Always has been. --- .../crafting/recipes/recipes_clothing.dm | 10 ++ code/game/objects/items/storage/belt.dm | 17 ++- code/modules/smithing/anvil.dm | 34 +++--- code/modules/smithing/finished_items.dm | 113 +++++++++++++----- code/modules/smithing/furnace.dm | 21 +++- code/modules/smithing/smithed_items.dm | 54 +++++++-- icons/obj/clothing/belts.dmi | Bin 13239 -> 13508 bytes icons/obj/smith.dmi | Bin 3268 -> 14133 bytes 8 files changed, 180 insertions(+), 69 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index 2a24c0b451..8c02d96dec 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -263,6 +263,16 @@ time = 30 category = CAT_CLOTHING +/datum/crafting_recipe/twinsheath + name = "Twin Sword Sheath" + result = /obj/item/storage/belt/sabre/twin + reqs = list(/obj/item/stack/sheet/wood = 3, + /obj/item/stack/sheet/leather = 8) + tools = list(TOOL_WIRECUTTER) + time = 70 + category = CAT_CLOTHING + + /datum/crafting_recipe/durathread_reinforcement_kit name = "Durathread Reinforcement Kit" result = /obj/item/armorkit diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 3c554aa58e..76f87adc6a 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -492,7 +492,7 @@ icon_state = "grenadebeltnew" item_state = "security" rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - + /obj/item/storage/belt/grenade/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) @@ -815,3 +815,18 @@ attack_verb = list("bashed", "slashes", "prods", "pokes") fitting_swords = list(/obj/item/melee/rapier) starting_sword = /obj/item/melee/rapier + +/obj/item/storage/belt/sabre/twin + name = "twin sheath" + desc = "Two sheaths. One is capable of holding a katana (or bokken) and the other a wakizashi. You could put two wakizashis in if you really wanted to. Now you can really roleplay as a samurai." + icon_state = "twinsheath" + item_state = "quiver" //this'll do. + w_class = WEIGHT_CLASS_BULKY + var/list/fitting_swords = list(/obj/item/melee/smith/wakizashi, /obj/item/melee/smith/twohand/katana, /obj/item/melee/bokken) + starting_sword = null + +/obj/item/storage/belt/sabre/twin/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 2 + STR.max_w_class = WEIGHT_CLASS_BULKY + WEIGHT_CLASS_NORMAL //katana and waki. diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 9bec834e29..c0f951879d 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -7,12 +7,13 @@ #define RECIPE_LARGEPICK "ddbp" //draw draw bend punch #define RECIPE_SHOVEL "dfup" //draw fold upset punch #define RECIPE_HAMMER "sfp" //shrink fold punch -#define RECIPE_AXE "ufp" //upset fold punch #define RECIPE_SMALLKNIFE "sdd" //shrink draw draw #define RECIPE_SHORTSWORD "dff" //draw fold fold +#define RECIPE_SCIMITAR "dfb" //draw fold bend #define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw +#define RECIPE_ZWEIHANDER "udfsf" //upset draw fold shrink fold #define RECIPE_KATANA "fffff" //fold fold fold fold fold @@ -23,6 +24,7 @@ #define RECIPE_JAVELIN "dbf" //draw bend fold #define RECIPE_HALBERD "duffp" //draw upset fold fold punch #define RECIPE_GLAIVE "usfp" //upset shrink fold punch +#define RECIPE_PIKE "ddbf" //draw draw bend fold /obj/structure/anvil name = "anvil" @@ -39,8 +41,7 @@ var/outrightfailchance = 1 //todo: document this shit var/stepsdone = "" var/rng = FALSE - var/list/smithrecipes = list(RECIPE_AXE = /obj/item/smithing/axehead, - RECIPE_HAMMER = /obj/item/smithing/hammerhead, + var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, RECIPE_SHOVEL = /obj/item/smithing/shovelhead, RECIPE_COGHEAD = /obj/item/smithing/cogheadclubhead, @@ -48,11 +49,14 @@ RECIPE_LARGEPICK = /obj/item/smithing/pickaxehead, RECIPE_SMALLPICK = /obj/item/smithing/prospectingpickhead, RECIPE_SHORTSWORD = /obj/item/smithing/shortswordblade, + RECIPE_SCIMITAR = /obj/item/smithing/scimitarblade, RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade, RECIPE_BROADSWORD = /obj/item/smithing/broadblade, + RECIPE_ZWEIHANDER = /obj/item/smithing/zweiblade, + RECIPE_KATANA = /obj/item/smithing/katanablade, RECIPE_HALBERD = /obj/item/smithing/halberdhead, RECIPE_GLAIVE = /obj/item/smithing/glaivehead, - RECIPE_KATANA = /obj/item/smithing/katanablade) + RECIPE_PIKE = /obj/item/smithing/pikehead) /obj/structure/anvil/Initialize() ..() @@ -172,7 +176,6 @@ /obj/structure/anvil/debugsuper name = "super ultra epic anvil of debugging." desc = "WOW. A DEBUG ITEM STRUCTURE. EPIC." - icon = 'icons/obj/smith.dmi' icon_state = "anvil" anvilquality = 10 outrightfailchance = 0 @@ -180,8 +183,6 @@ /obj/structure/anvil/obtainable name = "anvil" desc = "Base class of anvil. This shouldn't exist, but is useable." - icon = 'icons/obj/smith.dmi' - icon_state = "anvil" anvilquality = 0 outrightfailchance = 5 rng = TRUE @@ -189,7 +190,6 @@ /obj/structure/anvil/obtainable/table name = "table anvil" desc = "A slightly reinforced table. Good luck." - icon = 'icons/obj/smith.dmi' icon_state = "anvil" anvilquality = -2 @@ -206,38 +206,32 @@ name = "slab of bronze" desc = "A big block of bronze. Useable as an anvil." custom_materials = list(/datum/material/bronze=8000) - icon = 'icons/obj/smith.dmi' - icon_state = "anvil" + icon_state = "ratvaranvil" anvilquality = -1 /obj/structure/anvil/obtainable/sandstone name = "sandstone brick anvil" desc = "A big block of sandstone. Useable as an anvil." custom_materials = list(/datum/material/sandstone=8000) - icon = 'icons/obj/smith.dmi' - icon_state = "anvil" + icon_state = "sandvil" anvilquality = -1 /obj/structure/anvil/obtainable/basalt name = "basalt brick anvil" desc = "A big block of basalt. Useable as an anvil, better than sandstone. Igneous!" - icon = 'icons/obj/smith.dmi' - icon_state = "anvil" + icon_state = "sandvilnoir" anvilquality = -0.5 /obj/structure/anvil/obtainable/basic name = "anvil" desc = "An anvil. It's got wheels bolted to the bottom." - icon = 'icons/obj/smith.dmi' - icon_state = "anvil" anvilquality = 0 /obj/structure/anvil/obtainable/ratvar name = "brass anvil" desc = "A big block of what appears to be brass. Useable as an anvil, if whatever's holding the brass together lets you." custom_materials = list(/datum/material/bronze=8000) - icon = 'icons/obj/smith.dmi' - icon_state = "anvil" + icon_state = "ratvaranvil" anvilquality = 1 /obj/structure/anvil/obtainable/ratvar/attackby(obj/item/I, mob/user) @@ -251,11 +245,11 @@ desc = "An anvil made of a strange, runic metal." custom_materials = list(/datum/material/runedmetal=8000) icon = 'icons/obj/smith.dmi' - icon_state = "anvil" + icon_state = "evil" anvilquality = 1 /obj/structure/anvil/obtainable/narsie/attackby(obj/item/I, mob/user) - if(iscultistr(user)) + if(iscultist(user)) return ..() else to_chat(user, "That is not yours to use!") diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 1c8711aa2b..8f0bb99036 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -1,29 +1,3 @@ -//TODO: OBTAILABILITY, ANVIL TYPES, HAMMER TYPES, INGOTS - -/* -sords: -broadsword [x] -gladius [x] -dirk [x] -zweihander [x] -sabre -rapier -scimitar -katana [x] - -polearms: -halberd [x] -glaive [x] -javelin [x] -pike - -misc: -blacksmith's hammer [x] -scythe [x] -axe -coghead club -pickaxes [x] -*/ /obj/item/melee/smith name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit. @@ -32,6 +6,9 @@ pickaxes [x] icon_state = "mace_greyscale" item_state = "mace_greyscale" material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL force = 10 lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' @@ -55,7 +32,7 @@ pickaxes [x] /obj/item/melee/smith/twohand item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it. wielded_mult = 1.75 - + w_class = WEIGHT_CLASS_BULKY /obj/item/melee/smith/twohand/ComponentInitialize() . = ..() @@ -125,6 +102,7 @@ pickaxes [x] name = "halberd" icon_state = "halberd" overlay_state = "spearhandle" + slot_flags = ITEM_SLOT_BACK /obj/item/melee/smith/twohand/halberd/ComponentInitialize() . = ..() @@ -135,6 +113,7 @@ pickaxes [x] icon_state = "javelin" overlay_state = "longhandle" wielded_mult = 1.5 + slot_flags = ITEM_SLOT_BACK /obj/item/melee/smith/twohand/javelin/ComponentInitialize() @@ -145,17 +124,24 @@ pickaxes [x] name = "glaive" icon_state = "glaive" overlay_state = "longhandle" + slot_flags = ITEM_SLOT_BACK /obj/item/melee/smith/twohand/glaive/ComponentInitialize() . = ..() AddComponent(/datum/component/jousting) + + +/obj/item/melee/smith/twohand/pike + name = "pike" + icon_state = "pike" + overlay_state = "longhandle" + reach = 2 //yeah ok + slot_flags = ITEM_SLOT_BACK + ////////////////////////// // Other Melee // /////////////////////////// -/obj/item/melee/smith/axe - name = "axe" - item_flags = NEEDS_PERMIT /obj/item/melee/smith/hammer//blacksmithing, not warhammer. name = "hammer" @@ -169,7 +155,9 @@ pickaxes [x] /obj/item/melee/smith/cogheadclub name = "coghead club" + icon_state = "coghead" item_flags = NEEDS_PERMIT + overlay_state = "stick" /obj/item/melee/smith/shortsword name = "gladius" @@ -177,11 +165,37 @@ pickaxes [x] icon_state = "gladius" overlay_state = "gladiushilt" +/obj/item/melee/smith/shortsword/scimitar + name = "scimitar" + icon_state = "scimitar" + overlay_state = "scimitarhilt" + +/obj/item/melee/smith/wakizashi + name = "wakizashi" + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + icon_state = "waki" + overlay_state = "wakihilt" + block_parry_data = /datum/block_parry_data/waki + +/datum/block_parry_data/waki //like longbokken but worse reflect + parry_stamina_cost = 6 + parry_time_windup = 0 + parry_time_active = 15 //decent window + parry_time_spindown = 0 + parry_time_perfect = 2 + parry_time_perfect_leeway = 0.75 + parry_imperfect_falloff_percent = 7.5 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 80 + parry_efficiency_perfect = 120 + parry_failed_stagger_duration = 3 SECONDS + parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.9) + /obj/item/melee/smith/twohand/broadsword name = "broadsword" icon_state = "broadsword" overlay_state = "broadhilt" - force = 11 + force = 9 wielded_mult = 1.8 /obj/item/melee/smith/twohand/zweihander @@ -189,7 +203,7 @@ pickaxes [x] icon_state = "zweihander" overlay_state = "zweihilt" force = 4 - wielded_mult = 3 + wielded_mult = 3 //affected more by quality. a -1 is 25% less damage, a +1 is 25% more. These bonuses are tripled when wielded. /obj/item/melee/smith/twohand/katana name = "katana" @@ -198,7 +212,40 @@ pickaxes [x] force = 7 wielded_mult = 2 item_flags = ITEM_CAN_PARRY | UNIQUE_RENAME //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. - block_parry_data = /datum/block_parry_data/captain_saber + block_parry_data = /datum/block_parry_data/captain_saber //todo + +/obj/item/melee/smith/sabre + name = "sabre" + icon_state = "sabre" + overlay_state = "sabrehilt" + armour_penetration = 15 + force = 9 + hitsound = 'sound/weapons/rapierhit.ogg' + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + block_parry_data = /datum/block_parry_data/captain_saber //yeah this is fine i guess + +/obj/item/melee/smith/sabre/rapier + name = "rapier" + icon_state = "rapier" + overlay_state = "rapierhilt" + force = 6 //less force, stronger parry + armour_penetration = 30 + block_parry_data = /datum/block_parry_data/smithrapier + +/datum/block_parry_data/smithrapier //parry into riposte. i am pretty sure this is going to be nearly fucking impossible to land. + parry_stamina_cost = 12 //dont miss + parry_time_active = 4 + parry_time_perfect = 2 + parry_time_perfect_leeway = 2 + parry_failed_stagger_duration = 3 SECONDS + parry_failed_clickcd_duration = 3 SECONDS + parry_time_windup = 0 + parry_time_spindown = 0 + parry_imperfect_falloff_percent = 0 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 120 + parry_efficiency_perfect = 120 + parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 4) //unique hammers /obj/item/melee/smith/hammer/toolbox diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm index 4cc647353c..ee1d6a1b93 100644 --- a/code/modules/smithing/furnace.dm +++ b/code/modules/smithing/furnace.dm @@ -2,7 +2,7 @@ name = "furnace" desc = "A furnace." icon = 'icons/obj/smith.dmi' - icon_state = "anvil" + icon_state = "furnace0" density = TRUE anchored = TRUE var/debug = FALSE //debugging only @@ -25,8 +25,11 @@ return TRUE if(reagents.remove_reagent(/datum/reagent/fuel, fueluse)) working = TRUE + if(icon_state == "furnace0") + icon_state = "furnace1" else working = FALSE + icon_state = "furnace0" /obj/structure/furnace/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/ingot)) @@ -44,9 +47,23 @@ default_unfasten_wrench(user, I, 5) return TRUE +/obj/structure/furnace/attackby(obj/item/W, mob/user, params) + if(W.reagents) + W.reagents.trans_to(src, 250) + else + return ..() + +/obj/structure/furnace/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) + to_chat(user, "You start furiously plunging [name].") + if(do_after(user, 30, target = src)) + to_chat(user, "You finish plunging the [name].") + reagents.reaction(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + /obj/structure/furnace/infinite name = "fuelless furnace" debug = TRUE + icon_state = "ratfurnace" /obj/structure/furnace/infinite/ratvar @@ -55,4 +72,4 @@ /obj/structure/furnace/infinite/narsie name = "rune furnace" - desc = "A runed furnace. Powered by... something, but seems otherwise safe."//todo:sprites + desc = "A runed furnace. Powered by... something, but seems otherwise safe." diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 8fa8e8e167..e078871b2e 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -124,18 +124,6 @@ mat = mat.name finalitem.name = "[qualname] [mat] [finalitem.name]" finalitem.forceMove(get_turf(src)) - qdel(src) - - -/obj/item/smithing/axehead - name = "smithed axe head" - finalitem = /obj/item/melee/smith/axe - - -/obj/item/smithing/axehead/startfinish() - finalitem = new /obj/item/melee/smith/axe(src) - finalitem.force += quality - ..() /obj/item/smithing/hammerhead name = "smithed hammer head" @@ -176,6 +164,7 @@ /obj/item/smithing/cogheadclubhead name = "smithed coghead club head" finalitem = /obj/item/melee/smith/cogheadclub + icon_state = "coghead" /obj/item/smithing/cogheadclubhead/startfinish() finalitem = new /obj/item/melee/smith/cogheadclub(src) @@ -196,6 +185,19 @@ finalitem = finalforreal ..() +/obj/item/smithing/pikehead + name = "smithed pike head" + finalitem = /obj/item/melee/smith/twohand/pike + icon_state = "pike" + +/obj/item/smithing/pikehead/startfinish() + var/obj/item/melee/smith/twohand/pike/finalforreal = new /obj/item/melee/smith/twohand/pike(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalforreal.throwforce = finalforreal.force/10 //its a pike not a javelin + finalitem = finalforreal + ..() /obj/item/smithing/pickaxehead name = "smithed pickaxe head" @@ -233,7 +235,7 @@ /obj/item/smithing/shortswordblade - name = "smithed shortsword blade" + name = "smithed gladius blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/shortsword icon_state = "gladius" @@ -243,6 +245,18 @@ finalitem.force += quality ..() +/obj/item/smithing/scimitarblade + name = "smithed scimitar blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/shortsword/scimitar + icon_state = "scimitar" + +/obj/item/smithing/shortswordblade/startfinish() + finalitem = new /obj/item/melee/smith/shortsword/scimitar(src) + finalitem.force += quality + ..() + + /obj/item/smithing/knifeblade name = "smithed knife blade" finishingitem = /obj/item/swordhandle @@ -268,6 +282,20 @@ finalitem = finalforreal ..() +/obj/item/smithing/zweiblade + name = "smithed zweihander blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/twohand/zweihander + icon_state = "zweihander" + +/obj/item/smithing/zweiblade/startfinish() + var/obj/item/melee/smith/twohand/zweihander/finalforreal = new /obj/item/melee/smith/twohand/zweihander(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalitem = finalforreal + ..() + /obj/item/smithing/halberdhead name = "smithed halberd head" finalitem = /obj/item/melee/smith/twohand/halberd diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index c106bd12fcfd9e39ad4d5b4edd7a756e0d00ffb3..1a98872463e35d2e90654f007135675470d21af1 100644 GIT binary patch literal 13508 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 diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index e2a303112c383a3d67c372780f06b8b93a1a3d60..0af21125927745304449f77ffc8db7dc2349ce22 100644 GIT binary patch literal 14133 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 E2gNgoEC2ui literal 3268 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 Date: Sun, 23 Aug 2020 17:01:32 +1000 Subject: [PATCH 18/72] its asking me to commit hold on --- code/datums/components/crafting/recipes/recipes_clothing.dm | 2 +- code/game/objects/items/storage/belt.dm | 4 ++-- code/modules/smithing/finished_items.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index 8c02d96dec..31a90362be 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -266,7 +266,7 @@ /datum/crafting_recipe/twinsheath name = "Twin Sword Sheath" result = /obj/item/storage/belt/sabre/twin - reqs = list(/obj/item/stack/sheet/wood = 3, + reqs = list(/obj/item/stack/sheet/mineral/wood = 3, /obj/item/stack/sheet/leather = 8) tools = list(TOOL_WIRECUTTER) time = 70 diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 76f87adc6a..024e0495a8 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -820,9 +820,9 @@ name = "twin sheath" desc = "Two sheaths. One is capable of holding a katana (or bokken) and the other a wakizashi. You could put two wakizashis in if you really wanted to. Now you can really roleplay as a samurai." icon_state = "twinsheath" - item_state = "quiver" //this'll do. + item_state = "quiver" //this'll do. w_class = WEIGHT_CLASS_BULKY - var/list/fitting_swords = list(/obj/item/melee/smith/wakizashi, /obj/item/melee/smith/twohand/katana, /obj/item/melee/bokken) + fitting_swords = list(/obj/item/melee/smith/wakizashi, /obj/item/melee/smith/twohand/katana, /obj/item/melee/bokken) starting_sword = null /obj/item/storage/belt/sabre/twin/ComponentInitialize() diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 8f0bb99036..0ae833394f 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -286,7 +286,7 @@ if(!is_servant_of_ratvar(user)) user.DefaultCombatKnockdown(100) user.dropItemToGround(src, TRUE) - user.visible_message("A powerful force shoves [user] away from [target]!", "\""You shouldn't be touching tools that aren't yours.\"") + user.visible_message("A powerful force shoves [user] away from [target]!", "\"You shouldn't be touching tools that aren't yours.\"") if(ishuman(user)) var/mob/living/carbon/human/H = user H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) From ce4d50b9a957ef5bcf574dc222b4d62c2bb01b91 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 17:09:13 +1000 Subject: [PATCH 19/72] E --- code/modules/smithing/finished_items.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 0ae833394f..3e6e3de9e6 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -258,11 +258,11 @@ /obj/item/melee/smith/hammer/narsie name = "runemetal hammer" - custom_materials = list(datum/material/runedmetal = 12000) + custom_materials = list(/datum/material/runedmetal = 12000) desc = "A metal hammer inscribed with geometeric runes." qualitymod = 1 -/obj/item/melee/smith/hammer/narsie(mob/living/target, mob/living/carbon/human/user) +/obj/item/melee/smith/hammer/narsie/attack(mob/living/target, mob/living/carbon/human/user) if(!iscultist(user)) user.DefaultCombatKnockdown(100) user.dropItemToGround(src, TRUE) @@ -278,11 +278,11 @@ /obj/item/melee/smith/hammer/ratvar name = "brass hammer" - custom_materials = list(datum/material/bronze = 12000) + custom_materials = list(/datum/material/bronze = 12000) desc = "A brass hammer inscribed with... writing? You can't read it." qualitymod = 1 -/obj/item/melee/smith/hammer/ratvar(mob/living/target, mob/living/carbon/human/user) +/obj/item/melee/smith/hammer/ratvar/attack(mob/living/target, mob/living/carbon/human/user) if(!is_servant_of_ratvar(user)) user.DefaultCombatKnockdown(100) user.dropItemToGround(src, TRUE) From 220546b558ef527d211a1ed3e702535b5ca34366 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 17:19:30 +1000 Subject: [PATCH 20/72] you forgot the knife idiot --- code/modules/smithing/anvil.dm | 8 ++++---- code/modules/smithing/smithed_items.dm | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index c0f951879d..174ccb2e12 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -106,15 +106,15 @@ switch(stepdone) if("weak hit") currentsteps += 1 - outrightfailchance += 10 + outrightfailchance += 5 currentquality += 1 if("strong hit") currentsteps += 2 - outrightfailchance += 17.5 + outrightfailchance += 9.5 currentquality += 2 if("heavy hit") currentsteps += 3 - outrightfailchance += 25 + outrightfailchance += 12.5 currentquality += 3 if("fold") stepsdone += "f" @@ -146,7 +146,7 @@ tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - if(currentsteps > 12 || (rng && prob(outrightfailchance))) + if(currentsteps > 10 || (rng && prob(outrightfailchance))) to_chat(user, "You overwork the metal, causing it to turn into useless slag!") var/turf/T = get_turf(user) workpiece_state = FALSE diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e078871b2e..e6b9cf2824 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -265,7 +265,15 @@ /obj/item/smithing/knifehead/startfinish() finalitem = new /obj/item/kitchen/knife(src) - finalitem.force += quality/2 + finalitem.force = 4 + quality/2 + finalitem.icon = 'icons/obj/smith.dmi' + finalitem.icon_state = "dagger" + var/mutable_appearance/overlay = mutable_appearance('icons/obj/smith.dmi', "daggerhilt") + overlay.appearance_flags = RESET_COLOR + finalitem.add_overlay(overlay) + if(finalitem.force < 0) + finalitem.force = 0 + finalitem.MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS ..() /obj/item/smithing/broadblade From 73932b27d28d8ec5a67d95ad6f7d63b755c80623 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 17:43:34 +1000 Subject: [PATCH 21/72] TESTMERGE TIME? --- code/modules/smithing/anvil.dm | 8 ++++++- code/modules/smithing/finished_items.dm | 17 ++++++++++++- code/modules/smithing/smithed_items.dm | 32 +++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 174ccb2e12..64ca2ae6d4 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -11,8 +11,11 @@ #define RECIPE_SMALLKNIFE "sdd" //shrink draw draw #define RECIPE_SHORTSWORD "dff" //draw fold fold +#define RECIPE_WAKI "dfsf" //draw shrink fold #define RECIPE_SCIMITAR "dfb" //draw fold bend -#define RECIPE_BROADSWORD "dfufd" //draw fold upset fold draw +#define RECIPE_SABRE "ddsf" //draw draw shrink fold +#define RECIPE_RAPIER "sddf" //shrink draw draw fold +#define RECIPE_BROADSWORD "dfuf" //draw fold upset fold #define RECIPE_ZWEIHANDER "udfsf" //upset draw fold shrink fold #define RECIPE_KATANA "fffff" //fold fold fold fold fold @@ -50,6 +53,9 @@ RECIPE_SMALLPICK = /obj/item/smithing/prospectingpickhead, RECIPE_SHORTSWORD = /obj/item/smithing/shortswordblade, RECIPE_SCIMITAR = /obj/item/smithing/scimitarblade, + RECIPE_WAKI = /obj/item/smithing/wakiblade, + RECIPE_RAPIER = /obj/item/smithing/rapierblade, + RECIPE_SABRE = /obj/item/smithing/sabreblade, RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade, RECIPE_BROADSWORD = /obj/item/smithing/broadblade, RECIPE_ZWEIHANDER = /obj/item/smithing/zweiblade, diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 3e6e3de9e6..142ef39fe0 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -9,7 +9,7 @@ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL - force = 10 + force = 6 lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' var/quality @@ -31,6 +31,8 @@ /obj/item/melee/smith/twohand item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it. + sharpness = SHARP_EDGED + force = 5 wielded_mult = 1.75 w_class = WEIGHT_CLASS_BULKY @@ -49,6 +51,7 @@ desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." icon = 'icons/obj/smith.dmi' icon_state = "pickaxe" //todo:sprite + sharpness = SHARP_POINTY//it doesnt have a blade it has a point /obj/item/mining_scanner/prospector/Initialize() ..() @@ -65,6 +68,7 @@ desc = "A pickaxe." icon = 'icons/obj/smith.dmi' icon_state = "pickaxe" + sharpness = SHARP_POINTY /obj/item/pickaxe/smithed/Initialize() ..() @@ -81,6 +85,7 @@ desc = "A shovel." icon = 'icons/obj/smith.dmi' icon_state = "shovel" + sharpness = SHARP_EDGED //it cuts through the earth /obj/item/shovel/smithed/Initialize() ..() @@ -101,6 +106,7 @@ /obj/item/melee/smith/twohand/halberd name = "halberd" icon_state = "halberd" + w_class = WEIGHT_CLASS_HUGE overlay_state = "spearhandle" slot_flags = ITEM_SLOT_BACK @@ -114,6 +120,7 @@ overlay_state = "longhandle" wielded_mult = 1.5 slot_flags = ITEM_SLOT_BACK + sharpness = SHARP_POINTY /obj/item/melee/smith/twohand/javelin/ComponentInitialize() @@ -134,9 +141,11 @@ /obj/item/melee/smith/twohand/pike name = "pike" icon_state = "pike" + w_class = WEIGHT_CLASS_HUGE overlay_state = "longhandle" reach = 2 //yeah ok slot_flags = ITEM_SLOT_BACK + sharpness = SHARP_POINTY ////////////////////////// // Other Melee // @@ -162,16 +171,19 @@ /obj/item/melee/smith/shortsword name = "gladius" item_flags = NEEDS_PERMIT + sharpness = SHARP_EDGED icon_state = "gladius" overlay_state = "gladiushilt" /obj/item/melee/smith/shortsword/scimitar name = "scimitar" + sharpness = SHARP_EDGED icon_state = "scimitar" overlay_state = "scimitarhilt" /obj/item/melee/smith/wakizashi name = "wakizashi" + sharpness = SHARP_EDGED item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY icon_state = "waki" overlay_state = "wakihilt" @@ -217,6 +229,7 @@ /obj/item/melee/smith/sabre name = "sabre" icon_state = "sabre" + sharpness = SHARP_EDGED overlay_state = "sabrehilt" armour_penetration = 15 force = 9 @@ -227,8 +240,10 @@ /obj/item/melee/smith/sabre/rapier name = "rapier" icon_state = "rapier" + sharpness = SHARP_EDGED overlay_state = "rapierhilt" force = 6 //less force, stronger parry + sharpness = SHARP_POINTY armour_penetration = 30 block_parry_data = /datum/block_parry_data/smithrapier diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e6b9cf2824..6cbe4b237f 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -256,6 +256,38 @@ finalitem.force += quality ..() +/obj/item/smithing/wakiblade + name = "smithed wakizashi blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/wakizashi + icon_state = "waki" + +/obj/item/smithing/wakiblade/startfinish() + finalitem = new /obj/item/melee/smith/wakizashi(src) + finalitem.force += quality + ..() + +/obj/item/smithing/sabreblade + name = "smithed sabre blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/sabre + icon_state = "sabre" + +/obj/item/smithing/sabrerblade/startfinish() + finalitem = new /obj/item/melee/smith/sabre(src) + finalitem.force += quality + ..() + +/obj/item/smithing/rapierblade + name = "smithed rapier blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/sabre/rapier + icon_state = "rapier" + +/obj/item/smithing/rapierblade/startfinish() + finalitem = new /obj/item/melee/smith/sabre/rapier(src) + finalitem.force += quality + ..() /obj/item/smithing/knifeblade name = "smithed knife blade" From 04a755746bba6d3048b9aaae712a8c0a0b16a6a7 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 17:45:13 +1000 Subject: [PATCH 22/72] oh yeah --- code/modules/smithing/anvil.dm | 2 +- icons/obj/smith.dmi | Bin 14133 -> 14410 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 64ca2ae6d4..1e8a436470 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -196,7 +196,7 @@ /obj/structure/anvil/obtainable/table name = "table anvil" desc = "A slightly reinforced table. Good luck." - icon_state = "anvil" + icon_state = "tablevil" anvilquality = -2 diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index 0af21125927745304449f77ffc8db7dc2349ce22..c6fb94dce6e5c61b44751ce4dd3bf5ce46fc466e 100644 GIT binary patch literal 14410 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 HtzP{foZ#ZN literal 14133 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 E2gNgoEC2ui From c8ecfdf4a959231ae7a242622809ebda1b5b122e Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 17:50:33 +1000 Subject: [PATCH 23/72] Update anvil.dm --- code/modules/smithing/anvil.dm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 1e8a436470..63c0920511 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -44,6 +44,7 @@ var/outrightfailchance = 1 //todo: document this shit var/stepsdone = "" var/rng = FALSE + var/itemqualitymax = 2 var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, RECIPE_SHOVEL = /obj/item/smithing/shovelhead, @@ -171,7 +172,7 @@ var/obj/item/smithing/finisheditem = new create(T) to_chat(user, "You finish your [finisheditem]!") workpiece_state = FALSE - finisheditem.quality = currentquality + finisheditem.quality = min(currentquality, itemqualitymax) finisheditem.set_custom_materials(workpiece_material) currentquality = anvilquality stepsdone = "" @@ -198,6 +199,7 @@ desc = "A slightly reinforced table. Good luck." icon_state = "tablevil" anvilquality = -2 + itemqualitymax = 0 /obj/structure/anvil/obtainable/table/do_shaping(mob/user, var/qualitychange) @@ -214,6 +216,7 @@ custom_materials = list(/datum/material/bronze=8000) icon_state = "ratvaranvil" anvilquality = -1 + itemqualitymax = 1 /obj/structure/anvil/obtainable/sandstone name = "sandstone brick anvil" @@ -221,17 +224,20 @@ custom_materials = list(/datum/material/sandstone=8000) icon_state = "sandvil" anvilquality = -1 + itemqualitymax = 2 /obj/structure/anvil/obtainable/basalt name = "basalt brick anvil" desc = "A big block of basalt. Useable as an anvil, better than sandstone. Igneous!" icon_state = "sandvilnoir" anvilquality = -0.5 + itemqualitymax = 4 /obj/structure/anvil/obtainable/basic name = "anvil" desc = "An anvil. It's got wheels bolted to the bottom." anvilquality = 0 + itemqualitymax = 5 /obj/structure/anvil/obtainable/ratvar name = "brass anvil" @@ -239,6 +245,7 @@ custom_materials = list(/datum/material/bronze=8000) icon_state = "ratvaranvil" anvilquality = 1 + itemqualitymax = 8 /obj/structure/anvil/obtainable/ratvar/attackby(obj/item/I, mob/user) if(is_servant_of_ratvar(user)) @@ -253,6 +260,7 @@ icon = 'icons/obj/smith.dmi' icon_state = "evil" anvilquality = 1 + itemqualitymax = 8 /obj/structure/anvil/obtainable/narsie/attackby(obj/item/I, mob/user) if(iscultist(user)) From e138536cb62cf54fd905adc04c042feea02763f7 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 18:29:01 +1000 Subject: [PATCH 24/72] eee eee eee --- code/modules/smithing/smithed_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 6cbe4b237f..5a9770218b 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -305,7 +305,7 @@ finalitem.add_overlay(overlay) if(finalitem.force < 0) finalitem.force = 0 - finalitem.MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + finalitem.material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS ..() /obj/item/smithing/broadblade From ce2dca59326bb5d69bfdc58aa724d1bf211d8259 Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Sun, 23 Aug 2020 22:19:25 +1000 Subject: [PATCH 25/72] Update anvil.dm --- code/modules/smithing/anvil.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 63c0920511..141f631f91 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -44,7 +44,7 @@ var/outrightfailchance = 1 //todo: document this shit var/stepsdone = "" var/rng = FALSE - var/itemqualitymax = 2 + var/itemqualitymax = 20 var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, RECIPE_SHOVEL = /obj/item/smithing/shovelhead, @@ -185,6 +185,7 @@ desc = "WOW. A DEBUG ITEM STRUCTURE. EPIC." icon_state = "anvil" anvilquality = 10 + itemqualitymax = 9001 outrightfailchance = 0 /obj/structure/anvil/obtainable From ccf8aaf4126f61c551d0b61c9245fdc075acaedb Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sun, 23 Aug 2020 23:53:38 +1000 Subject: [PATCH 26/72] ee --- code/modules/smithing/finished_items.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 142ef39fe0..5c653eb011 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -214,6 +214,7 @@ name = "zweihander" icon_state = "zweihander" overlay_state = "zweihilt" + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON * 2 force = 4 wielded_mult = 3 //affected more by quality. a -1 is 25% less damage, a +1 is 25% more. These bonuses are tripled when wielded. From 05250939c6b551ccbbf43f327a0daa668e7da77f Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Sun, 23 Aug 2020 23:58:04 +1000 Subject: [PATCH 27/72] e --- code/game/objects/items/stacks/sheets/sheet_types.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4cb898d51f..100a705f15 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -689,6 +689,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ null, new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze anvil", /obj/structure/anvil/obtainable/bronze, 20, time = 110, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ From 289280f0ecc56524a6539f1eadddb050dca9b55d Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Mon, 24 Aug 2020 00:00:39 +1000 Subject: [PATCH 28/72] Update recipes_misc.dm --- .../components/crafting/recipes/recipes_misc.dm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index f47a879a9a..7166813ff5 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -119,6 +119,17 @@ subcategory = CAT_MISCELLANEOUS category = CAT_MISC always_availible = FALSE // Disabled til learned + +/datum/crafting_recipe/furnace + name = "Sandstone Furnace" + result = /obj/structure/furnace + time = 300 + reqs = list(/obj/item/stack/sheet/mineral/sandstone = 15, + /obj/item/stack/sheet/metal = 4, + /obj/item/stack/rods = 2) + tools = list(TOOL_CROWBAR) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC /datum/crafting_recipe/tableanvil name = "Table Anvil" @@ -134,7 +145,7 @@ name = "Sandstone Anvil" result = /obj/structure/anvil/obtainable/sandstone time = 300 - reqs = list(/obj/item/stack/sheet/mineral/sandstone = 4) + reqs = list(/obj/item/stack/sheet/mineral/sandstone = 24) tools = list(TOOL_CROWBAR) subcategory = CAT_MISCELLANEOUS category = CAT_MISC From d45ac6323a455c1eaaca2b2cf96dd2f67169ad86 Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Mon, 24 Aug 2020 00:09:58 +1000 Subject: [PATCH 29/72] Update smithed_items.dm --- code/modules/smithing/smithed_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 5a9770218b..e55ea96f75 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -24,7 +24,7 @@ /obj/item/ingot/on_attack_hand(mob/user) var/mob/living/carbon/human/H - if(!workability == "shapeable") + if(!(workability == "shapeable")) return ..() var/prot = 0 if(ishuman(user)) From 1f576dfd124c12d91bc2cb0cef73874002058ea1 Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Mon, 24 Aug 2020 00:15:27 +1000 Subject: [PATCH 30/72] Update smithed_items.dm --- code/modules/smithing/smithed_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e55ea96f75..0224069431 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -19,12 +19,12 @@ icon = 'icons/obj/smith.dmi' icon_state = "ingot" material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX - var/workability = "cold" + var/workability = 0 /obj/item/ingot/on_attack_hand(mob/user) var/mob/living/carbon/human/H - if(!(workability == "shapeable")) + if(!workability) return ..() var/prot = 0 if(ishuman(user)) From 460c92de74f43931f4e5134fd67a870817221f60 Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Mon, 24 Aug 2020 00:20:04 +1000 Subject: [PATCH 31/72] 3 --- code/game/objects/items/stacks/sheets/sheet_types.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 100a705f15..3fb72b8191 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -695,7 +695,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ new/datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ -)) +) /obj/item/stack/sheet/bronze name = "brass" From cdc7490ee17b55537ce657ed51af0db3151d977b Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:26:26 +1000 Subject: [PATCH 33/72] e --- code/modules/smithing/anvil.dm | 7 ++----- code/modules/smithing/smithed_items.dm | 1 + 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 141f631f91..34be1ae3e7 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -147,14 +147,13 @@ stepsdone += "u" currentsteps += 1 currentquality -= 1 - to_chat(user, "You [stepdone] the metal.") - to_chat(user, stepsdone) + to_chat(user, "") if(length(stepsdone) >= 3) tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) if(currentsteps > 10 || (rng && prob(outrightfailchance))) - to_chat(user, "You overwork the metal, causing it to turn into useless slag!") + to_chat(user, "") var/turf/T = get_turf(user) workpiece_state = FALSE new /obj/item/stack/ore/slag(T) @@ -164,8 +163,6 @@ outrightfailchance = 1 if(user.mind.skill_holder) user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE) - 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] diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 5a9770218b..e8216865cb 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -377,6 +377,7 @@ finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal + ..() /obj/item/stick name = "wooden rod" From b74c5ba22dae622913059ec118480311ea9a32b8 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:27:22 +1000 Subject: [PATCH 34/72] ee --- code/game/objects/items/stacks/sheets/sheet_types.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4cb898d51f..8f0fdc1aa9 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -691,10 +691,10 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ - + null, new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ new/datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ -)) +) /obj/item/stack/sheet/bronze name = "brass" From a032fb4a3de235cc167c2d51c1e05e217cdb4aec Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:35:12 +1000 Subject: [PATCH 35/72] e --- code/modules/smithing/anvil.dm | 2 ++ code/modules/smithing/smithed_items.dm | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 34be1ae3e7..e05e3c45db 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -110,6 +110,8 @@ var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps + if(!do_after(user, 20, target = src)) + return FALSE switch(stepdone) if("weak hit") currentsteps += 1 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index d22003b95c..5da7a0f8f4 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -99,7 +99,6 @@ dofinish() /obj/item/smithing/proc/dofinish() - visible_message("The finishing of [src].") var/qualname switch(quality) if(-1000 to -5) @@ -124,6 +123,7 @@ mat = mat.name finalitem.name = "[qualname] [mat] [finalitem.name]" finalitem.forceMove(get_turf(src)) + qdel(src) /obj/item/smithing/hammerhead name = "smithed hammer head" From eda8d516b95edc848b86bdbcbe2523c6982c34b5 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:41:22 +1000 Subject: [PATCH 36/72] e --- code/modules/smithing/smithed_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 5da7a0f8f4..a1e8592a93 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -2,7 +2,7 @@ name = "basalt block" desc = "A block of basalt." icon = 'icons/obj/smith.dmi' - icon_state = "unfinished" + icon_state = "sandvilnoir" /obj/item/smithing From 4b2b4afc64bbcf04a0d6ad738482f10c55304185 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:49:31 +1000 Subject: [PATCH 37/72] e --- code/game/objects/items/stacks/sheets/sheet_types.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a065983b8a..6f5aaaebfb 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -689,13 +689,12 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ null, new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("bronze anvil", /obj/structure/anvil/obtainable/bronze, 20, time = 110, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ new/datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ -) +)) /obj/item/stack/sheet/bronze name = "brass" From 0f9f1e240cc09193bf8d2f6072a5d88b313519ca Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:51:13 +1000 Subject: [PATCH 38/72] w --- code/game/objects/items/stacks/sheets/sheet_types.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 6f5aaaebfb..da571b514e 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -691,6 +691,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze anvil",/obj/structure/anvil/obtainable/bronze, 20, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ new/datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ From 69caf7a3315e411a86ce9bd351f8a98f56eb63e1 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 00:56:38 +1000 Subject: [PATCH 39/72] ear --- code/modules/smithing/anvil.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index e05e3c45db..3d98b21945 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -14,7 +14,7 @@ #define RECIPE_WAKI "dfsf" //draw shrink fold #define RECIPE_SCIMITAR "dfb" //draw fold bend #define RECIPE_SABRE "ddsf" //draw draw shrink fold -#define RECIPE_RAPIER "sddf" //shrink draw draw fold +#define RECIPE_RAPIER "sdfd" //shrink draw fold draw #define RECIPE_BROADSWORD "dfuf" //draw fold upset fold #define RECIPE_ZWEIHANDER "udfsf" //upset draw fold shrink fold #define RECIPE_KATANA "fffff" //fold fold fold fold fold @@ -165,6 +165,7 @@ outrightfailchance = 1 if(user.mind.skill_holder) user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE) + for(var/i in smithrecipes) if(i == stepsdone) var/turf/T = get_turf(user) var/obj/item/smithing/create = smithrecipes[stepsdone] @@ -177,6 +178,8 @@ stepsdone = "" currentsteps = 0 outrightfailchance = 1 + if(user.mind.skill_holder) + user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 200, 10000000, silent = FALSE) break /obj/structure/anvil/debugsuper From daeaf81ab647814ecbc3ab6bdcd41bf89117c384 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 01:25:26 +1000 Subject: [PATCH 40/72] e --- code/game/objects/items/stacks/sheets/sheet_types.dm | 2 +- code/modules/smithing/anvil.dm | 4 ++-- code/modules/smithing/finished_items.dm | 1 + code/modules/smithing/smithed_items.dm | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index da571b514e..aeb27dd401 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -691,7 +691,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("bronze anvil",/obj/structure/anvil/obtainable/bronze, 20, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze anvil",/obj/structure/anvil/obtainable/bronze, 20, time = 110, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ new/datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 3d98b21945..d6c144bdf7 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -149,7 +149,7 @@ stepsdone += "u" currentsteps += 1 currentquality -= 1 - to_chat(user, "") + to_chat(user, "You [stepdone] the metal.") if(length(stepsdone) >= 3) tryfinish(user) @@ -179,7 +179,7 @@ currentsteps = 0 outrightfailchance = 1 if(user.mind.skill_holder) - user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 200, 10000000, silent = FALSE) + user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 50, 10000000, silent = FALSE) break /obj/structure/anvil/debugsuper diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 5c653eb011..0d61097002 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -32,6 +32,7 @@ /obj/item/melee/smith/twohand item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it. sharpness = SHARP_EDGED + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS force = 5 wielded_mult = 1.75 w_class = WEIGHT_CLASS_BULKY diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index a1e8592a93..3d036d380c 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -24,7 +24,7 @@ /obj/item/ingot/on_attack_hand(mob/user) var/mob/living/carbon/human/H - if(!workability) + if(workability != "shapeable") return ..() var/prot = 0 if(ishuman(user)) From 5218840e6dd242e3657ffa89d2cc7ce8414c6f3b Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 02:01:46 +1000 Subject: [PATCH 41/72] w --- code/modules/smithing/smithed_items.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 3d036d380c..5a96eb2244 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -83,10 +83,6 @@ name = "brass ingnot" desc = "On closer inspection, what appears to be wholly-unsuitable-for-smithing brass is actually more structurally stable bronze. Ratvar must have transformed the brass into bronze. Somehow." -/obj/item/smithing/Initialize() - ..() - desc = "A [src]. Hit it with a [finishingitem.name] to create a [finalitem.name]." - /obj/item/smithing/attackby(obj/item/I, mob/user) if(istype(I, finishingitem)) From bd5848a0e385fbdd799c6fbf11516dbebd878787 Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Mon, 24 Aug 2020 08:52:42 +1000 Subject: [PATCH 42/72] Update recipes_misc.dm --- code/datums/components/crafting/recipes/recipes_misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 7166813ff5..ca1b65e220 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -161,7 +161,7 @@ /datum/crafting_recipe/basaltanvil name = "Basalt Anvil" - result = /obj/structure/anvil/obtainable/sandstone + result = /obj/structure/anvil/obtainable/basalt time = 200 reqs = list(/obj/item/basaltblock = 5) tools = list(TOOL_CROWBAR) From 40bcd3f902dc501450848724775e8ef55a96cc16 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 11:18:02 +1000 Subject: [PATCH 43/72] PACK IT UP FOLKS --- code/modules/smithing/anvil.dm | 18 +++++++++++++++--- code/modules/smithing/finished_items.dm | 2 +- code/modules/smithing/smithed_items.dm | 7 +++++-- icons/obj/smith.dmi | Bin 14410 -> 14762 bytes 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index d6c144bdf7..73c748e148 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -110,7 +110,11 @@ var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps - if(!do_after(user, 20, target = src)) + var/steptime = 100 + if(user.mind.skill_holder) + var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 + steptime = 100 / skillmod + if(!do_after(user, steptime, target = src)) return FALSE switch(stepdone) if("weak hit") @@ -149,12 +153,20 @@ stepsdone += "u" currentsteps += 1 currentquality -= 1 - to_chat(user, "You [stepdone] the metal.") + user.visible_message("[user] works the metal on the anvil with their hammer with a loud clang!", \ + "You [stepdone] the metal with a loud clang!") + playsound(src, 'sound/effects/clang2.ogg',20, 2) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 20, 2), 15) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 20, 2), 30) if(length(stepsdone) >= 3) tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - if(currentsteps > 10 || (rng && prob(outrightfailchance))) + var/finalfailchance = outrightfailchance + if(user.mind.skill_holder) + var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 + finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc + if(currentsteps > 10 || (rng && prob(finalfailchance))) to_chat(user, "") var/turf/T = get_turf(user) workpiece_state = FALSE diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 0d61097002..f36287b33a 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -23,7 +23,7 @@ if(desc == "cringe") desc = "A handmade [name]." overlay = mutable_appearance(icon, overlay_state) - overlay.appearance_flags = RESET_COLOR + overlay.color = "FFFFFF" add_overlay(overlay) if(force < 0) force = 0 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 5a96eb2244..1e8c549dd7 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -101,7 +101,7 @@ qualname = "awful" if(-1000 to -2) qualname = "shoddy" - if(-1000 to 0) + if(-1000 to -1) qualname = "poor" if(0) qualname = "normal" @@ -118,6 +118,7 @@ var/datum/material/mat = custom_materials[1] mat = mat.name finalitem.name = "[qualname] [mat] [finalitem.name]" + finalitem.desc = "A [qualname] [finalitem.name]." finalitem.forceMove(get_turf(src)) qdel(src) @@ -291,11 +292,13 @@ finalitem = /obj/item/kitchen/knife icon_state = "dagger" -/obj/item/smithing/knifehead/startfinish() +/obj/item/smithing/knifeblade/startfinish() finalitem = new /obj/item/kitchen/knife(src) finalitem.force = 4 + quality/2 finalitem.icon = 'icons/obj/smith.dmi' finalitem.icon_state = "dagger" + finalitem.name = "dagger" + finalitem.desc = "A dagger." var/mutable_appearance/overlay = mutable_appearance('icons/obj/smith.dmi', "daggerhilt") overlay.appearance_flags = RESET_COLOR finalitem.add_overlay(overlay) diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index c6fb94dce6e5c61b44751ce4dd3bf5ce46fc466e..a40b9a2b1908d68516a9faa02d8a402c8d5efea4 100644 GIT binary patch literal 14762 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 ZX|jpJ4+dlk;5(Rr_I-WzYBlS~{{veOmgfKf literal 14410 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 HtzP{foZ#ZN From d9f1ebd6f52d2ee50f61a17a87f6bd236edb84f8 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 11:44:18 +1000 Subject: [PATCH 44/72] MOVING SOME LINES AROUND FOLKS --- code/modules/smithing/anvil.dm | 2 +- code/modules/smithing/finished_items.dm | 5 +++-- code/modules/smithing/smithed_items.dm | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 73c748e148..ffa8790a17 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -114,6 +114,7 @@ if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 steptime = 100 / skillmod + playsound(src, 'sound/effects/clang2.ogg',20, 2) if(!do_after(user, steptime, target = src)) return FALSE switch(stepdone) @@ -157,7 +158,6 @@ "You [stepdone] the metal with a loud clang!") playsound(src, 'sound/effects/clang2.ogg',20, 2) addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 20, 2), 15) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 20, 2), 30) if(length(stepsdone) >= 3) tryfinish(user) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index f36287b33a..33a258cbd2 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/smith.dmi' icon_state = "mace_greyscale" item_state = "mace_greyscale" + color = null material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok slot_flags = ITEM_SLOT_BELT @@ -185,7 +186,7 @@ /obj/item/melee/smith/wakizashi name = "wakizashi" sharpness = SHARP_EDGED - item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY | UNIQUE_RENAME icon_state = "waki" overlay_state = "wakihilt" block_parry_data = /datum/block_parry_data/waki @@ -225,7 +226,7 @@ overlay_state = "katanahilt" force = 7 wielded_mult = 2 - item_flags = ITEM_CAN_PARRY | UNIQUE_RENAME //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. + item_flags = ITEM_CAN_PARRY | UNIQUE_RENAME | NEEDS_PERMIT //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. block_parry_data = /datum/block_parry_data/captain_saber //todo /obj/item/melee/smith/sabre diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 1e8c549dd7..121b26c671 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -117,8 +117,8 @@ qualname = "above-average" var/datum/material/mat = custom_materials[1] mat = mat.name - finalitem.name = "[qualname] [mat] [finalitem.name]" - finalitem.desc = "A [qualname] [finalitem.name]." + finalitem.name = "[qualname] [mat] [initial(finalitem.name)]" + finalitem.desc = "A [qualname] [initial(finalitem.name)]." finalitem.forceMove(get_turf(src)) qdel(src) @@ -248,7 +248,7 @@ finalitem = /obj/item/melee/smith/shortsword/scimitar icon_state = "scimitar" -/obj/item/smithing/shortswordblade/startfinish() +/obj/item/smithing/scimitarblade/startfinish() finalitem = new /obj/item/melee/smith/shortsword/scimitar(src) finalitem.force += quality ..() From 97e5fbd29fc43a447ecc7c196fd92f1328b40760 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 11:48:22 +1000 Subject: [PATCH 45/72] YOU CAN UNPACK IT NOW FOLKS, KATANAS NO LONGER DROPDEL --- code/modules/smithing/finished_items.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 33a258cbd2..f7c91187c5 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -186,7 +186,8 @@ /obj/item/melee/smith/wakizashi name = "wakizashi" sharpness = SHARP_EDGED - item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY | UNIQUE_RENAME + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + obj_flags = UNIQUE_RENAME icon_state = "waki" overlay_state = "wakihilt" block_parry_data = /datum/block_parry_data/waki @@ -226,7 +227,8 @@ overlay_state = "katanahilt" force = 7 wielded_mult = 2 - item_flags = ITEM_CAN_PARRY | UNIQUE_RENAME | NEEDS_PERMIT //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. + item_flags = ITEM_CAN_PARRY | NEEDS_PERMIT //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. + obj_flags = UNIQUE_RENAME block_parry_data = /datum/block_parry_data/captain_saber //todo /obj/item/melee/smith/sabre From 037b939f550b92d65bac5a12009b38e3638e4ded Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 12:36:17 +1000 Subject: [PATCH 46/72] THIS WAS THE PROBLEM THE ENTIRE TIME --- code/modules/smithing/finished_items.dm | 3 +-- code/modules/smithing/smithed_items.dm | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index f7c91187c5..1aa017e100 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -5,7 +5,6 @@ icon = 'icons/obj/smith.dmi' icon_state = "mace_greyscale" item_state = "mace_greyscale" - color = null material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok slot_flags = ITEM_SLOT_BELT @@ -24,7 +23,7 @@ if(desc == "cringe") desc = "A handmade [name]." overlay = mutable_appearance(icon, overlay_state) - overlay.color = "FFFFFF" + overlay.appearance_flags = RESET_COLOR add_overlay(overlay) if(force < 0) force = 0 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 121b26c671..4c23a28aff 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -116,6 +116,7 @@ if(1,2,3) qualname = "above-average" var/datum/material/mat = custom_materials[1] + finalitem.set_custom_materials(custom_materials) mat = mat.name finalitem.name = "[qualname] [mat] [initial(finalitem.name)]" finalitem.desc = "A [qualname] [initial(finalitem.name)]." From 579d7bb4f2361323413377bf8ff4148c7723f337 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 12:49:54 +1000 Subject: [PATCH 47/72] whoops! --- code/modules/smithing/anvil.dm | 2 +- code/modules/smithing/finished_items.dm | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index ffa8790a17..477a337f18 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -11,7 +11,7 @@ #define RECIPE_SMALLKNIFE "sdd" //shrink draw draw #define RECIPE_SHORTSWORD "dff" //draw fold fold -#define RECIPE_WAKI "dfsf" //draw shrink fold +#define RECIPE_WAKI "dfsf" //draw fold shrink fold #define RECIPE_SCIMITAR "dfb" //draw fold bend #define RECIPE_SABRE "ddsf" //draw draw shrink fold #define RECIPE_RAPIER "sdfd" //shrink draw fold draw diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 1aa017e100..fdefe974ac 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -50,8 +50,9 @@ /obj/item/mining_scanner/prospector name = "prospector's pickaxe" desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS icon = 'icons/obj/smith.dmi' - icon_state = "pickaxe" //todo:sprite + icon_state = "minipick" //todo:sprite sharpness = SHARP_POINTY//it doesnt have a blade it has a point /obj/item/mining_scanner/prospector/Initialize() @@ -67,6 +68,7 @@ /obj/item/pickaxe/smithed name = "pickaxe" desc = "A pickaxe." + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS icon = 'icons/obj/smith.dmi' icon_state = "pickaxe" sharpness = SHARP_POINTY @@ -81,10 +83,14 @@ if(force < 0) force = 0 +/obj/item/pickaxe/smithed/attack_self(mob/user) + to_chat(user, "Tool does not have a configureable dig range.") + /obj/item/shovel/smithed name = "shovel" desc = "A shovel." icon = 'icons/obj/smith.dmi' + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS icon_state = "shovel" sharpness = SHARP_EDGED //it cuts through the earth From ff5c4d779f99ce153237dfaad3ce40540aa61444 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 13:19:05 +1000 Subject: [PATCH 48/72] ok --- code/modules/smithing/finished_items.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index fdefe974ac..55082d3992 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -3,15 +3,15 @@ name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit. desc = "cringe" icon = 'icons/obj/smith.dmi' - icon_state = "mace_greyscale" - item_state = "mace_greyscale" + icon_state = "claymore" + item_state = "claymore" material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL force = 6 - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' var/quality var/overlay_state = "stick" var/mutable_appearance/overlay From 94e24a97382dbfb95e58751446727c6b7a42a1ec Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 17:52:42 +1000 Subject: [PATCH 49/72] anvillan --- code/modules/cargo/packs/misc.dm | 7 +++++++ code/modules/smithing/anvil.dm | 2 +- code/modules/smithing/smithed_items.dm | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index c6728831eb..394b86bb81 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -13,6 +13,13 @@ //////////////////// Paperwork and Writing Supplies ////////////////////////// ////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/misc/anvil + name = "Anvil Crate" + desc = "An anvil in a crate, we had to dig this out of the old warehouse. It's got wheels on it so you can move it." + cost = 7500 + contains = list(/obj/structure/anvil/obtainable/basic) + /datum/supply_pack/misc/artsupply name = "Art Supplies" desc = "Make some happy little accidents with six canvasses, two easels, two boxes of crayons, and a rainbow crayon!" diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 477a337f18..fc4608361b 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -252,7 +252,7 @@ name = "anvil" desc = "An anvil. It's got wheels bolted to the bottom." anvilquality = 0 - itemqualitymax = 5 + itemqualitymax = 6 /obj/structure/anvil/obtainable/ratvar name = "brass anvil" diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 4c23a28aff..daa16e2da3 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -103,7 +103,7 @@ qualname = "shoddy" if(-1000 to -1) qualname = "poor" - if(0) + if(-1 to 1) qualname = "normal" if(10 to INFINITY) qualname = "legendary" From 2df3bbd82245396a20bfc39971e0b497c1fbfdc4 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 18:55:48 +1000 Subject: [PATCH 50/72] r --- code/modules/smithing/anvil.dm | 12 ++++++++++-- code/modules/smithing/smithed_items.dm | 25 +++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index fc4608361b..f3dcefed22 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -162,11 +162,13 @@ tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) + var/artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + var/artifact = prob(artifactchance) var/finalfailchance = outrightfailchance if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc - if(currentsteps > 10 || (rng && prob(finalfailchance))) + if(currentsteps > 10 || (rng && prob(finalfailchance)) || artifact) to_chat(user, "") var/turf/T = get_turf(user) workpiece_state = FALSE @@ -183,8 +185,14 @@ var/obj/item/smithing/create = smithrecipes[stepsdone] var/obj/item/smithing/finisheditem = new create(T) to_chat(user, "You finish your [finisheditem]!") + if(artifact) + to_chat(user, "It is an artifact, a creation whose legacy shall live on forevermore.") //todo: SSblackbox + currentquality = max(currentquality, 2) + finisheditem.quality = currentquality * 3//this is insane i know it's 1/2500 for most of the time and 0.8% at best + finisheditem.artifact = TRUE + else + finisheditem.quality = min(currentquality, itemqualitymax) workpiece_state = FALSE - finisheditem.quality = min(currentquality, itemqualitymax) finisheditem.set_custom_materials(workpiece_material) currentquality = anvilquality stepsdone = "" diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index daa16e2da3..47fd9727e2 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -13,6 +13,7 @@ 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 + var/artifact = FALSE /obj/item/ingot name = "ingot" @@ -118,11 +119,31 @@ var/datum/material/mat = custom_materials[1] finalitem.set_custom_materials(custom_materials) mat = mat.name - finalitem.name = "[qualname] [mat] [initial(finalitem.name)]" - finalitem.desc = "A [qualname] [initial(finalitem.name)]." + if(artifact) + dwarfyartifact(finalitem, mat) + else + finalitem.name = "[qualname] [mat] [initial(finalitem.name)]" + finalitem.desc = "A [qualname] [initial(finalitem.name)]." finalitem.forceMove(get_turf(src)) qdel(src) + +/obj/item/smithing/proc/dwarfyartifact(var/obj/item/finalitem, var/mat) + var/finaldesc = "A [initial(finalitem.name)] made of [mat], all craftsmanship is of the highest quality. " + switch(pick(1,2,3,4,5)) + if(1) + finaldesc += "It is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")]." + if(2) + finaldesc += "is laced with studs of [pick("gold","silver","aluminium","titanium")]." + if(3) + finaldesc += "is encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")]." + if(4) + finaldesc += "menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." + if(5) + finaldesc += "It is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." + finalitem.desc = finaldesc + finalitem.name = pick("Delersibnir", "Nekolangrir", "Zanoreshik","Öntakrítin", "Nogzatan", "Vunomam", "Nazushagsaldôbar", "Sergeb", "Zafaldastot", "Vudnis", "Dostust", "Shotom", "Mugshith", "Angzak", "Oltud", "Deleratîs", "Nökornomal") //one of these is literally BLOOD POOL CREATE.iirc its Nazushagsaldôbar. + /obj/item/smithing/hammerhead name = "smithed hammer head" finalitem = /obj/item/melee/smith/hammer From e8379eb6a215c0b6811a20a1b36b45c73ec1e0d1 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 19:11:01 +1000 Subject: [PATCH 51/72] whoops --- code/modules/smithing/anvil.dm | 11 ++++++----- code/modules/smithing/finished_items.dm | 2 +- code/modules/smithing/smithed_items.dm | 8 ++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index f3dcefed22..8e57aaccd3 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -44,6 +44,7 @@ var/outrightfailchance = 1 //todo: document this shit var/stepsdone = "" var/rng = FALSE + var/debug = FALSE //vv this if you want an artifact var/itemqualitymax = 20 var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, @@ -114,7 +115,7 @@ if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 steptime = 100 / skillmod - playsound(src, 'sound/effects/clang2.ogg',20, 2) + playsound(src, 'sound/effects/clang2.ogg',40, 2) if(!do_after(user, steptime, target = src)) return FALSE switch(stepdone) @@ -156,14 +157,14 @@ currentquality -= 1 user.visible_message("[user] works the metal on the anvil with their hammer with a loud clang!", \ "You [stepdone] the metal with a loud clang!") - playsound(src, 'sound/effects/clang2.ogg',20, 2) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 20, 2), 15) + playsound(src, 'sound/effects/clang2.ogg',40, 2) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 40, 2), 15) if(length(stepsdone) >= 3) tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - var/artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 - var/artifact = prob(artifactchance) + var/artifactchance = (1+(get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + var/artifact = max(prob(artifactchance), debug) var/finalfailchance = outrightfailchance if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 55082d3992..133009e5d1 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -220,7 +220,7 @@ /obj/item/melee/smith/twohand/zweihander name = "zweihander" - icon_state = "zweihander" + icon_state = "zwei" overlay_state = "zweihilt" total_mass = TOTAL_MASS_MEDIEVAL_WEAPON * 2 force = 4 diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 47fd9727e2..7e89b88afb 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -129,10 +129,10 @@ /obj/item/smithing/proc/dwarfyartifact(var/obj/item/finalitem, var/mat) - var/finaldesc = "A [initial(finalitem.name)] made of [mat], all craftsmanship is of the highest quality. " + var/finaldesc = "A [initial(finalitem.name)] made of [mat], all craftsmanship is of the highest quality. It " switch(pick(1,2,3,4,5)) if(1) - finaldesc += "It is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")]." + finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")]." if(2) finaldesc += "is laced with studs of [pick("gold","silver","aluminium","titanium")]." if(3) @@ -140,7 +140,7 @@ if(4) finaldesc += "menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." if(5) - finaldesc += "It is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." + finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." finalitem.desc = finaldesc finalitem.name = pick("Delersibnir", "Nekolangrir", "Zanoreshik","Öntakrítin", "Nogzatan", "Vunomam", "Nazushagsaldôbar", "Sergeb", "Zafaldastot", "Vudnis", "Dostust", "Shotom", "Mugshith", "Angzak", "Oltud", "Deleratîs", "Nökornomal") //one of these is literally BLOOD POOL CREATE.iirc its Nazushagsaldôbar. @@ -347,7 +347,7 @@ name = "smithed zweihander blade" finishingitem = /obj/item/swordhandle finalitem = /obj/item/melee/smith/twohand/zweihander - icon_state = "zweihander" + icon_state = "zwei" /obj/item/smithing/zweiblade/startfinish() var/obj/item/melee/smith/twohand/zweihander/finalforreal = new /obj/item/melee/smith/twohand/zweihander(src) From 9d9a6d0d5d321f590890840c44b8b16eb84dec24 Mon Sep 17 00:00:00 2001 From: lolman360 <22850904+lolman360@users.noreply.github.com> Date: Mon, 24 Aug 2020 20:33:21 +1000 Subject: [PATCH 52/72] Update anvil.dm --- code/modules/smithing/anvil.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 8e57aaccd3..892cf6c40a 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -163,7 +163,7 @@ tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - var/artifactchance = (1+(get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + var/artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 var/artifact = max(prob(artifactchance), debug) var/finalfailchance = outrightfailchance if(user.mind.skill_holder) From e646b3af32a2d1234dccd6485c43ad1b2ca08d1c Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 21:03:11 +1000 Subject: [PATCH 53/72] bet --- code/modules/smithing/smithed_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 7e89b88afb..bf0c50b23f 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -140,7 +140,7 @@ if(4) finaldesc += "menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." if(5) - finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." + finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapis lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." finalitem.desc = finaldesc finalitem.name = pick("Delersibnir", "Nekolangrir", "Zanoreshik","Öntakrítin", "Nogzatan", "Vunomam", "Nazushagsaldôbar", "Sergeb", "Zafaldastot", "Vudnis", "Dostust", "Shotom", "Mugshith", "Angzak", "Oltud", "Deleratîs", "Nökornomal") //one of these is literally BLOOD POOL CREATE.iirc its Nazushagsaldôbar. From dcbdc05c5a346b2b98fedccd025caf3d46c26ccc Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 23:31:21 +1000 Subject: [PATCH 54/72] Update smithed_items.dm --- code/modules/smithing/smithed_items.dm | 36 +++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index bf0c50b23f..6ee0d221cf 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -151,7 +151,7 @@ /obj/item/smithing/hammerhead/startfinish() var/obj/item/melee/smith/hammer/finalforreal = new /obj/item/melee/smith/hammer(src) - finalforreal.force += quality/2 + finalforreal.force *= 1+(quality/15) finalforreal.qualitymod = quality/4 finalitem = finalforreal ..() @@ -165,7 +165,7 @@ /obj/item/smithing/scytheblade/startfinish() finalitem = new /obj/item/scythe/smithed(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/shovelhead @@ -175,7 +175,7 @@ /obj/item/smithing/shovelhead/startfinish() finalitem = new /obj/item/shovel/smithed(src) - finalitem.force += quality/2 + finalitem.force *= 1+(quality/20) if(quality) finalitem.toolspeed /= quality ..() @@ -187,7 +187,7 @@ /obj/item/smithing/cogheadclubhead/startfinish() finalitem = new /obj/item/melee/smith/cogheadclub(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/javelinhead @@ -197,7 +197,7 @@ /obj/item/smithing/javelinhead/startfinish() var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) - finalforreal.force += quality + finalforreal.force += *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalforreal.throwforce = finalforreal.force*2 @@ -211,7 +211,7 @@ /obj/item/smithing/pikehead/startfinish() var/obj/item/melee/smith/twohand/pike/finalforreal = new /obj/item/melee/smith/twohand/pike(src) - finalforreal.force += quality + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalforreal.throwforce = finalforreal.force/10 //its a pike not a javelin @@ -225,7 +225,7 @@ /obj/item/smithing/pickaxehead/startfinish() var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) - finalforreal.force += quality/2 + finalforreal.force *= 1+(quality/20) if(quality) finalforreal.toolspeed /= quality switch(quality) @@ -261,7 +261,7 @@ /obj/item/smithing/shortswordblade/startfinish() finalitem = new /obj/item/melee/smith/shortsword(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/scimitarblade @@ -272,7 +272,7 @@ /obj/item/smithing/scimitarblade/startfinish() finalitem = new /obj/item/melee/smith/shortsword/scimitar(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/wakiblade @@ -283,7 +283,7 @@ /obj/item/smithing/wakiblade/startfinish() finalitem = new /obj/item/melee/smith/wakizashi(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/sabreblade @@ -294,7 +294,7 @@ /obj/item/smithing/sabrerblade/startfinish() finalitem = new /obj/item/melee/smith/sabre(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/rapierblade @@ -305,7 +305,7 @@ /obj/item/smithing/rapierblade/startfinish() finalitem = new /obj/item/melee/smith/sabre/rapier(src) - finalitem.force += quality + finalitem.force *= 1+(quality/10) ..() /obj/item/smithing/knifeblade @@ -337,7 +337,7 @@ /obj/item/smithing/broadblade/startfinish() var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src) - finalforreal.force += quality + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal @@ -351,7 +351,7 @@ /obj/item/smithing/zweiblade/startfinish() var/obj/item/melee/smith/twohand/zweihander/finalforreal = new /obj/item/melee/smith/twohand/zweihander(src) - finalforreal.force += quality + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal @@ -364,7 +364,7 @@ /obj/item/smithing/halberdhead/startfinish() var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/halberd(src) - finalforreal.force += quality + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force/3 finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") @@ -376,9 +376,9 @@ finalitem = /obj/item/melee/smith/twohand/glaive icon_state = "glaive" -/obj/item/smithing/glaive/startfinish() +/obj/item/smithing/glaivehead/startfinish() var/obj/item/melee/smith/twohand/glaive/finalforreal = new /obj/item/melee/smith/twohand/glaive(src) - finalforreal.force += quality + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") @@ -394,7 +394,7 @@ /obj/item/smithing/katanablade/startfinish() var/obj/item/melee/smith/twohand/katana/finalforreal = new /obj/item/melee/smith/twohand/katana(src) - finalforreal.force += quality + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal From a2f33d27a2aa0419a8c3cf4104a74843f2952511 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 23:42:39 +1000 Subject: [PATCH 55/72] ee --- code/modules/smithing/anvil.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 892cf6c40a..12473a3ebc 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -169,7 +169,7 @@ if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc - if(currentsteps > 10 || (rng && prob(finalfailchance)) || artifact) + if(currentsteps > 10 || (rng && prob(finalfailchance)) || !artifact) to_chat(user, "") var/turf/T = get_turf(user) workpiece_state = FALSE From 4e82ce87eb53261ee20de819c8a90759e130df09 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 23:43:42 +1000 Subject: [PATCH 56/72] EEEEEEEEEEEEe --- code/modules/smithing/smithed_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 6ee0d221cf..78064a528e 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -197,7 +197,7 @@ /obj/item/smithing/javelinhead/startfinish() var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) - finalforreal.force += *= 1+(quality/10) + finalforreal.force *= 1+(quality/10) finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalforreal.throwforce = finalforreal.force*2 From b5c000cac4e8f71ad33b997712b687f3dffb805e Mon Sep 17 00:00:00 2001 From: lolman360 Date: Mon, 24 Aug 2020 23:48:45 +1000 Subject: [PATCH 57/72] eee --- code/modules/smithing/anvil.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 12473a3ebc..f873b62dd8 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -45,6 +45,7 @@ var/stepsdone = "" var/rng = FALSE var/debug = FALSE //vv this if you want an artifact + var/artifactrolled = FALSE var/itemqualitymax = 20 var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead, RECIPE_SCYTHE = /obj/item/smithing/scytheblade, @@ -163,13 +164,16 @@ tryfinish(user) /obj/structure/anvil/proc/tryfinish(mob/user) - var/artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + var/artifactchance = 0 + if(!artifactrolled) + artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + artifactrolled = TRUE var/artifact = max(prob(artifactchance), debug) var/finalfailchance = outrightfailchance if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc - if(currentsteps > 10 || (rng && prob(finalfailchance)) || !artifact) + if((currentsteps > 10 || (rng && prob(finalfailchance))) && !artifact) to_chat(user, "") var/turf/T = get_turf(user) workpiece_state = FALSE @@ -178,6 +182,7 @@ stepsdone = "" currentsteps = 0 outrightfailchance = 1 + artifactrolled = FALSE if(user.mind.skill_holder) user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE) for(var/i in smithrecipes) @@ -199,6 +204,7 @@ stepsdone = "" currentsteps = 0 outrightfailchance = 1 + artifactrolled = FALSE if(user.mind.skill_holder) user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 50, 10000000, silent = FALSE) break From c79f63bd008353d97632dcaa77f3119ed4e4fa6c Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 25 Aug 2020 18:54:22 +1000 Subject: [PATCH 58/72] e --- code/modules/smithing/smithed_items.dm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 78064a528e..ddc0c0e93a 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -108,13 +108,13 @@ qualname = "normal" if(10 to INFINITY) qualname = "legendary" - if(8,9) + if(7.5 to 10) qualname = "masterwork" - if(6,7) + if(5.5 to 7.5) qualname = "excellent" - if(4,5) + if(3.5 to 5.5) qualname = "good" - if(1,2,3) + if(0 to 3.5) qualname = "above-average" var/datum/material/mat = custom_materials[1] finalitem.set_custom_materials(custom_materials) @@ -123,7 +123,7 @@ dwarfyartifact(finalitem, mat) else finalitem.name = "[qualname] [mat] [initial(finalitem.name)]" - finalitem.desc = "A [qualname] [initial(finalitem.name)]." + finalitem.desc = "A [qualname] [initial(finalitem.name)]. Its quality is [quality]." finalitem.forceMove(get_turf(src)) qdel(src) @@ -176,8 +176,10 @@ /obj/item/smithing/shovelhead/startfinish() finalitem = new /obj/item/shovel/smithed(src) finalitem.force *= 1+(quality/20) - if(quality) + if(quality > 0) finalitem.toolspeed /= quality + else + finalitem.toolspeed *= (quality * -1) ..() /obj/item/smithing/cogheadclubhead @@ -226,8 +228,10 @@ /obj/item/smithing/pickaxehead/startfinish() var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) finalforreal.force *= 1+(quality/20) - if(quality) + if(quality > 0) finalforreal.toolspeed /= quality + else + finalforreal.toolspeed *= (quality * -1) switch(quality) if(10 to INFINITY) finalforreal.digrange = 4 @@ -235,6 +239,8 @@ finalforreal.digrange = 3 if(3,4) finalforreal.digrange = 2 + else + finalforreal.digrange = 1 finalitem = finalforreal ..() From 6b096d80cc041364f01f8d59ba85b08f5172d1bf Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 25 Aug 2020 18:55:57 +1000 Subject: [PATCH 59/72] eee o aaa --- code/datums/components/crafting/recipes/recipes_misc.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index ca1b65e220..14987bac44 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -119,7 +119,7 @@ subcategory = CAT_MISCELLANEOUS category = CAT_MISC always_availible = FALSE // Disabled til learned - + /datum/crafting_recipe/furnace name = "Sandstone Furnace" result = /obj/structure/furnace @@ -422,7 +422,6 @@ name = "Stick" time = 30 reqs = list(/obj/item/stack/sheet/mineral/wood = 1) - tools = list(/obj/item/hatchet) result = /obj/item/stick subcategory = CAT_MISCELLANEOUS category = CAT_MISC @@ -432,7 +431,6 @@ name = "Sword Hilt" time = 30 reqs = list(/obj/item/stack/sheet/mineral/wood = 2) - tools = list(/obj/item/hatchet) result = /obj/item/swordhandle subcategory = CAT_MISCELLANEOUS category = CAT_MISC From 519592693be290c978e2dd7acaf6a65789abe761 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 25 Aug 2020 19:01:07 +1000 Subject: [PATCH 60/72] e --- code/modules/smithing/finished_items.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 133009e5d1..ffb862040d 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -177,6 +177,7 @@ /obj/item/melee/smith/shortsword name = "gladius" + force = 9 item_flags = NEEDS_PERMIT sharpness = SHARP_EDGED icon_state = "gladius" @@ -191,6 +192,7 @@ /obj/item/melee/smith/wakizashi name = "wakizashi" sharpness = SHARP_EDGED + force = 9 item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY obj_flags = UNIQUE_RENAME icon_state = "waki" From 43af2650377e540073e1c5c42b8d9536367c1d1e Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 25 Aug 2020 19:01:24 +1000 Subject: [PATCH 61/72] Update finished_items.dm --- code/modules/smithing/finished_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index ffb862040d..4ea5c441cf 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -192,7 +192,7 @@ /obj/item/melee/smith/wakizashi name = "wakizashi" sharpness = SHARP_EDGED - force = 9 + force = 7 item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY obj_flags = UNIQUE_RENAME icon_state = "waki" From 2b057b2483cedd365db3ec86c00af2c06fbd20ee Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 25 Aug 2020 19:03:04 +1000 Subject: [PATCH 62/72] reverti9es --- code/modules/smithing/smithed_items.dm | 36 +++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index ddc0c0e93a..2d1a998b28 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -151,7 +151,7 @@ /obj/item/smithing/hammerhead/startfinish() var/obj/item/melee/smith/hammer/finalforreal = new /obj/item/melee/smith/hammer(src) - finalforreal.force *= 1+(quality/15) + finalforreal.force += quality/2 finalforreal.qualitymod = quality/4 finalitem = finalforreal ..() @@ -165,7 +165,7 @@ /obj/item/smithing/scytheblade/startfinish() finalitem = new /obj/item/scythe/smithed(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/shovelhead @@ -175,7 +175,7 @@ /obj/item/smithing/shovelhead/startfinish() finalitem = new /obj/item/shovel/smithed(src) - finalitem.force *= 1+(quality/20) + finalitem.force += quality/2 if(quality > 0) finalitem.toolspeed /= quality else @@ -189,7 +189,7 @@ /obj/item/smithing/cogheadclubhead/startfinish() finalitem = new /obj/item/melee/smith/cogheadclub(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/javelinhead @@ -199,7 +199,7 @@ /obj/item/smithing/javelinhead/startfinish() var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalforreal.throwforce = finalforreal.force*2 @@ -213,7 +213,7 @@ /obj/item/smithing/pikehead/startfinish() var/obj/item/melee/smith/twohand/pike/finalforreal = new /obj/item/melee/smith/twohand/pike(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalforreal.throwforce = finalforreal.force/10 //its a pike not a javelin @@ -227,7 +227,7 @@ /obj/item/smithing/pickaxehead/startfinish() var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) - finalforreal.force *= 1+(quality/20) + finalforreal.force += quality/2 if(quality > 0) finalforreal.toolspeed /= quality else @@ -267,7 +267,7 @@ /obj/item/smithing/shortswordblade/startfinish() finalitem = new /obj/item/melee/smith/shortsword(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/scimitarblade @@ -278,7 +278,7 @@ /obj/item/smithing/scimitarblade/startfinish() finalitem = new /obj/item/melee/smith/shortsword/scimitar(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/wakiblade @@ -289,7 +289,7 @@ /obj/item/smithing/wakiblade/startfinish() finalitem = new /obj/item/melee/smith/wakizashi(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/sabreblade @@ -300,7 +300,7 @@ /obj/item/smithing/sabrerblade/startfinish() finalitem = new /obj/item/melee/smith/sabre(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/rapierblade @@ -311,7 +311,7 @@ /obj/item/smithing/rapierblade/startfinish() finalitem = new /obj/item/melee/smith/sabre/rapier(src) - finalitem.force *= 1+(quality/10) + finalitem.force += quality ..() /obj/item/smithing/knifeblade @@ -343,7 +343,7 @@ /obj/item/smithing/broadblade/startfinish() var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal @@ -357,7 +357,7 @@ /obj/item/smithing/zweiblade/startfinish() var/obj/item/melee/smith/twohand/zweihander/finalforreal = new /obj/item/melee/smith/twohand/zweihander(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal @@ -370,7 +370,7 @@ /obj/item/smithing/halberdhead/startfinish() var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/halberd(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force/3 finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") @@ -382,9 +382,9 @@ finalitem = /obj/item/melee/smith/twohand/glaive icon_state = "glaive" -/obj/item/smithing/glaivehead/startfinish() +/obj/item/smithing/glaive/startfinish() var/obj/item/melee/smith/twohand/glaive/finalforreal = new /obj/item/melee/smith/twohand/glaive(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.throwforce = finalforreal.force finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") @@ -400,7 +400,7 @@ /obj/item/smithing/katanablade/startfinish() var/obj/item/melee/smith/twohand/katana/finalforreal = new /obj/item/melee/smith/twohand/katana(src) - finalforreal.force *= 1+(quality/10) + finalforreal.force += quality finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") finalitem = finalforreal From 408babe0dc25089a34678267e33ad7e76aa4ac6e Mon Sep 17 00:00:00 2001 From: lolman360 Date: Thu, 27 Aug 2020 12:00:11 +1000 Subject: [PATCH 63/72] Math --- code/modules/smithing/smithed_items.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 2d1a998b28..29c4091d1e 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -177,9 +177,11 @@ finalitem = new /obj/item/shovel/smithed(src) finalitem.force += quality/2 if(quality > 0) - finalitem.toolspeed /= quality + finalforreal.toolspeed = max(0.05,(1-(quality/10))) + else if(quality = 0) + finalforreal.toolspeed = 1 else - finalitem.toolspeed *= (quality * -1) + finalforreal.toolspeed *= (quality * -1) ..() /obj/item/smithing/cogheadclubhead @@ -229,7 +231,9 @@ var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) finalforreal.force += quality/2 if(quality > 0) - finalforreal.toolspeed /= quality + finalforreal.toolspeed = max(0.05,(1-(quality/10))) + else if(quality = 0) + finalforreal.toolspeed = 1 else finalforreal.toolspeed *= (quality * -1) switch(quality) From a988dcce73b9027d381bad3896d89f60403f2c18 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Thu, 27 Aug 2020 12:02:18 +1000 Subject: [PATCH 64/72] better --- code/modules/smithing/smithed_items.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 29c4091d1e..e066d708cf 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -178,10 +178,8 @@ finalitem.force += quality/2 if(quality > 0) finalforreal.toolspeed = max(0.05,(1-(quality/10))) - else if(quality = 0) - finalforreal.toolspeed = 1 else - finalforreal.toolspeed *= (quality * -1) + finalforreal.toolspeed *= max(1, (quality * -1)) ..() /obj/item/smithing/cogheadclubhead @@ -232,10 +230,8 @@ finalforreal.force += quality/2 if(quality > 0) finalforreal.toolspeed = max(0.05,(1-(quality/10))) - else if(quality = 0) - finalforreal.toolspeed = 1 else - finalforreal.toolspeed *= (quality * -1) + finalforreal.toolspeed *= max(1, (quality * -1)) switch(quality) if(10 to INFINITY) finalforreal.digrange = 4 From 54c32f916275103d72577014b85b552e4505be33 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Thu, 27 Aug 2020 17:43:46 +1000 Subject: [PATCH 65/72] Update smithed_items.dm --- code/modules/smithing/smithed_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index e066d708cf..0965b1b834 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -177,9 +177,9 @@ finalitem = new /obj/item/shovel/smithed(src) finalitem.force += quality/2 if(quality > 0) - finalforreal.toolspeed = max(0.05,(1-(quality/10))) + finalitem.toolspeed = max(0.05,(1-(quality/10))) else - finalforreal.toolspeed *= max(1, (quality * -1)) + finalitem.toolspeed *= max(1, (quality * -1)) ..() /obj/item/smithing/cogheadclubhead From 55c825032413b0a68df9fa7cade6013034c06805 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 28 Aug 2020 12:44:59 +1000 Subject: [PATCH 66/72] AAAAAAAAAAAAAAAAA --- code/game/objects/items/stacks/sheets/sheet_types.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index aeb27dd401..9ed930b8c7 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -623,6 +623,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("brass stool", /obj/structure/chair/stool/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass anvil", /obj/structure/anvil/obtainable/ratvar, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass furnace", /obj/structure/furnace/infinite/ratvar, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ null, \ new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("sender - mech sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ From c2ded74d6a47e7835e69a7f9b0b6b34a388627f0 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Fri, 28 Aug 2020 12:54:58 +1000 Subject: [PATCH 67/72] e --- code/modules/smithing/smithed_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm index 0965b1b834..df30a01f8c 100644 --- a/code/modules/smithing/smithed_items.dm +++ b/code/modules/smithing/smithed_items.dm @@ -179,7 +179,7 @@ if(quality > 0) finalitem.toolspeed = max(0.05,(1-(quality/10))) else - finalitem.toolspeed *= max(1, (quality * -1)) + finalitem.toolspeed *= max(1, (quality * -1)) ..() /obj/item/smithing/cogheadclubhead @@ -298,7 +298,7 @@ finalitem = /obj/item/melee/smith/sabre icon_state = "sabre" -/obj/item/smithing/sabrerblade/startfinish() +/obj/item/smithing/sabreblade/startfinish() finalitem = new /obj/item/melee/smith/sabre(src) finalitem.force += quality ..() From f223c9eeb57668752b5ea217dab40ac93e9d37b8 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Sat, 29 Aug 2020 18:38:17 +1000 Subject: [PATCH 68/72] eee --- code/modules/smithing/anvil.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index f873b62dd8..3f96622f03 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -112,10 +112,10 @@ var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps - var/steptime = 100 + var/steptime = 50 if(user.mind.skill_holder) var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 - steptime = 100 / skillmod + steptime = 50 / skillmod playsound(src, 'sound/effects/clang2.ogg',40, 2) if(!do_after(user, steptime, target = src)) return FALSE From 400391e8d8347b891bce18ff5351b5cb27a3c8cf Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 1 Sep 2020 10:37:56 +1000 Subject: [PATCH 69/72] Bronze anvil tweaks, clarity. --- code/modules/smithing/anvil.dm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 3f96622f03..6843bd02d2 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -198,6 +198,17 @@ finisheditem.artifact = TRUE else finisheditem.quality = min(currentquality, itemqualitymax) + switch(finisheditem.quality) + if(-1000 to -8) + finisheditem.desc = "It looks to be the most awfully made object you've ever seen." + if(-8) + finisheditem.desc = "It looks to be the second most awfully made object you've ever seen." + if(-8 to 0) + finisheditem.desc = "It looks to be barely passable as... whatever it's trying to pass for." + if(0) + finisheditem.desc = "It looks to be totally average." + if(0 to INFINITY) + finisheditem.desc = "It looks to be better than average." workpiece_state = FALSE finisheditem.set_custom_materials(workpiece_material) currentquality = anvilquality @@ -245,8 +256,8 @@ desc = "A big block of bronze. Useable as an anvil." custom_materials = list(/datum/material/bronze=8000) icon_state = "ratvaranvil" - anvilquality = -1 - itemqualitymax = 1 + anvilquality = -0.5 + itemqualitymax = 2 /obj/structure/anvil/obtainable/sandstone name = "sandstone brick anvil" From 4d6fb10dff73f2e59d97a4c7043d6578392ec50c Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 1 Sep 2020 10:55:55 +1000 Subject: [PATCH 70/72] Nyoops. --- code/modules/smithing/anvil.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 6843bd02d2..88711aec37 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -200,15 +200,15 @@ finisheditem.quality = min(currentquality, itemqualitymax) switch(finisheditem.quality) if(-1000 to -8) - finisheditem.desc = "It looks to be the most awfully made object you've ever seen." + finisheditem.desc = "It looks to be the most awfully made object you've ever seen." if(-8) - finisheditem.desc = "It looks to be the second most awfully made object you've ever seen." + finisheditem.desc = "It looks to be the second most awfully made object you've ever seen." if(-8 to 0) - finisheditem.desc = "It looks to be barely passable as... whatever it's trying to pass for." + finisheditem.desc = "It looks to be barely passable as... whatever it's trying to pass for." if(0) - finisheditem.desc = "It looks to be totally average." + finisheditem.desc = "It looks to be totally average." if(0 to INFINITY) - finisheditem.desc = "It looks to be better than average." + finisheditem.desc = "It looks to be better than average." workpiece_state = FALSE finisheditem.set_custom_materials(workpiece_material) currentquality = anvilquality From 1b52ceb63aab9a5aeac916ff56c2ac4693e334a3 Mon Sep 17 00:00:00 2001 From: lolman360 Date: Tue, 1 Sep 2020 11:43:01 +1000 Subject: [PATCH 71/72] Various changes. --- code/modules/smithing/finished_items.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm index 4ea5c441cf..5db6b09452 100644 --- a/code/modules/smithing/finished_items.dm +++ b/code/modules/smithing/finished_items.dm @@ -33,7 +33,7 @@ item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it. sharpness = SHARP_EDGED material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS - force = 5 + force = 10 wielded_mult = 1.75 w_class = WEIGHT_CLASS_BULKY @@ -116,6 +116,7 @@ w_class = WEIGHT_CLASS_HUGE overlay_state = "spearhandle" slot_flags = ITEM_SLOT_BACK + wielded_mult = 2.5 /obj/item/melee/smith/twohand/halberd/ComponentInitialize() . = ..() @@ -139,6 +140,7 @@ icon_state = "glaive" overlay_state = "longhandle" slot_flags = ITEM_SLOT_BACK + wielded_mult = 2 /obj/item/melee/smith/twohand/glaive/ComponentInitialize() . = ..() @@ -217,7 +219,6 @@ name = "broadsword" icon_state = "broadsword" overlay_state = "broadhilt" - force = 9 wielded_mult = 1.8 /obj/item/melee/smith/twohand/zweihander