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 c106bd12fc..1a98872463 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi index e2a303112c..0af2112592 100644 Binary files a/icons/obj/smith.dmi and b/icons/obj/smith.dmi differ