mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 18:33:36 +00:00
Merge pull request #13244 from lolman360/AnPrimAssistants
Blacksmithing 2: Anarcho-Primitivist Assistants (travis don't fail on me now)
This commit is contained in:
@@ -273,6 +273,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/mineral/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
|
||||
|
||||
@@ -120,6 +120,53 @@
|
||||
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"
|
||||
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 = 24)
|
||||
tools = list(TOOL_CROWBAR)
|
||||
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/basalt
|
||||
time = 200
|
||||
reqs = list(/obj/item/basaltblock = 5)
|
||||
tools = list(TOOL_CROWBAR)
|
||||
subcategory = CAT_MISCELLANEOUS
|
||||
category = CAT_MISC
|
||||
///////////////////
|
||||
//Tools & Storage//
|
||||
///////////////////
|
||||
@@ -175,6 +222,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
|
||||
@@ -358,6 +416,25 @@
|
||||
//Unsorted//
|
||||
////////////
|
||||
|
||||
|
||||
|
||||
/datum/crafting_recipe/stick
|
||||
name = "Stick"
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 1)
|
||||
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)
|
||||
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)
|
||||
|
||||
@@ -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)
|
||||
@@ -286,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/sheet/bronze
|
||||
value_per_unit = 0.025
|
||||
|
||||
@@ -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))
|
||||
|
||||
6
code/datums/skills/blacksmithing.dm
Normal file
6
code/datums/skills/blacksmithing.dm
Normal file
@@ -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
|
||||
@@ -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), \ not yet
|
||||
))
|
||||
|
||||
/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), \ no
|
||||
))
|
||||
|
||||
/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
|
||||
|
||||
@@ -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
|
||||
@@ -556,6 +557,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
|
||||
@@ -618,6 +622,8 @@ 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), \
|
||||
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), \
|
||||
@@ -629,6 +635,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
|
||||
@@ -684,7 +692,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), \
|
||||
new /datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \
|
||||
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), \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/bronze
|
||||
|
||||
@@ -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
|
||||
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.
|
||||
|
||||
@@ -174,7 +174,14 @@
|
||||
new reward(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating the [choice]!</span>")
|
||||
|
||||
|
||||
/obj/structure/destructible/cult/forge/attackby(obj/item/I, mob/user)
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "<span class='warning'>The heat radiating from [src] pushes you back.</span>")
|
||||
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"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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
|
||||
|
||||
315
code/modules/smithing/anvil.dm
Normal file
315
code/modules/smithing/anvil.dm
Normal file
@@ -0,0 +1,315 @@
|
||||
#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_HAMMER "sfp" //shrink fold punch
|
||||
|
||||
|
||||
#define RECIPE_SMALLKNIFE "sdd" //shrink draw draw
|
||||
#define RECIPE_SHORTSWORD "dff" //draw fold 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
|
||||
#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
|
||||
|
||||
|
||||
#define RECIPE_SCYTHE "bdf" //bend draw fold
|
||||
#define RECIPE_COGHEAD "bsf" //bend shrink fold.
|
||||
|
||||
|
||||
#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"
|
||||
desc = "Base class of anvil. This shouldn't exist, but is useable."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "anvil"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/workpiece_state = FALSE
|
||||
var/datum/material/workpiece_material
|
||||
var/anvilquality = 0
|
||||
var/currentquality = 0 //lolman? what the fuck do these vars do?
|
||||
var/currentsteps = 0 //even i don't know
|
||||
var/outrightfailchance = 1 //todo: document this shit
|
||||
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,
|
||||
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_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,
|
||||
RECIPE_KATANA = /obj/item/smithing/katanablade,
|
||||
RECIPE_HALBERD = /obj/item/smithing/halberdhead,
|
||||
RECIPE_GLAIVE = /obj/item/smithing/glaivehead,
|
||||
RECIPE_PIKE = /obj/item/smithing/pikehead)
|
||||
|
||||
/obj/structure/anvil/Initialize()
|
||||
..()
|
||||
currentquality = anvilquality
|
||||
|
||||
/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
|
||||
workpiece_material = notsword.custom_materials
|
||||
to_chat(user, "You place the [notsword] on the [src].")
|
||||
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!")
|
||||
return FALSE
|
||||
return
|
||||
else if(istype(I, /obj/item/melee/smith/hammer))
|
||||
var/obj/item/melee/smith/hammer/hammertime = I
|
||||
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
|
||||
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/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
|
||||
var/steptime = 50
|
||||
if(user.mind.skill_holder)
|
||||
var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1
|
||||
steptime = 50 / skillmod
|
||||
playsound(src, 'sound/effects/clang2.ogg',40, 2)
|
||||
if(!do_after(user, steptime, target = src))
|
||||
return FALSE
|
||||
switch(stepdone)
|
||||
if("weak hit")
|
||||
currentsteps += 1
|
||||
outrightfailchance += 5
|
||||
currentquality += 1
|
||||
if("strong hit")
|
||||
currentsteps += 2
|
||||
outrightfailchance += 9.5
|
||||
currentquality += 2
|
||||
if("heavy hit")
|
||||
currentsteps += 3
|
||||
outrightfailchance += 12.5
|
||||
currentquality += 3
|
||||
if("fold")
|
||||
stepsdone += "f"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("draw")
|
||||
stepsdone += "d"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("shrink")
|
||||
stepsdone += "s"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("bend")
|
||||
stepsdone += "b"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("punch")
|
||||
stepsdone += "p"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
if("upset")
|
||||
stepsdone += "u"
|
||||
currentsteps += 1
|
||||
currentquality -= 1
|
||||
user.visible_message("<span class='notice'>[user] works the metal on the anvil with their hammer with a loud clang!</span>", \
|
||||
"<span class='notice'>You [stepdone] the metal with a loud clang!</span>")
|
||||
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 = 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)
|
||||
to_chat(user, "<span class='warning'?You overwork the metal, causing it to turn into useless slag!</span>")
|
||||
var/turf/T = get_turf(user)
|
||||
workpiece_state = FALSE
|
||||
new /obj/item/stack/ore/slag(T)
|
||||
currentquality = anvilquality
|
||||
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)
|
||||
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]!")
|
||||
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)
|
||||
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
|
||||
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
|
||||
|
||||
/obj/structure/anvil/debugsuper
|
||||
name = "super ultra epic anvil of debugging."
|
||||
desc = "WOW. A DEBUG <del>ITEM</DEL> STRUCTURE. EPIC."
|
||||
icon_state = "anvil"
|
||||
anvilquality = 10
|
||||
itemqualitymax = 9001
|
||||
outrightfailchance = 0
|
||||
|
||||
/obj/structure/anvil/obtainable
|
||||
name = "anvil"
|
||||
desc = "Base class of anvil. This shouldn't exist, but is useable."
|
||||
anvilquality = 0
|
||||
outrightfailchance = 5
|
||||
rng = TRUE
|
||||
|
||||
/obj/structure/anvil/obtainable/table
|
||||
name = "table anvil"
|
||||
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)
|
||||
if(prob(5))
|
||||
to_chat(user, "The [src] breaks under the strain!")
|
||||
take_damage(max_integrity)
|
||||
return FALSE
|
||||
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_state = "ratvaranvil"
|
||||
anvilquality = -0.5
|
||||
itemqualitymax = 2
|
||||
|
||||
/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_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 = 6
|
||||
|
||||
/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_state = "ratvaranvil"
|
||||
anvilquality = 1
|
||||
itemqualitymax = 8
|
||||
|
||||
/obj/structure/anvil/obtainable/ratvar/attackby(obj/item/I, mob/user)
|
||||
if(is_servant_of_ratvar(user))
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='neovgre'>KNPXWN, QNJCQNW!</span>") //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 = "evil"
|
||||
anvilquality = 1
|
||||
itemqualitymax = 8
|
||||
|
||||
/obj/structure/anvil/obtainable/narsie/attackby(obj/item/I, mob/user)
|
||||
if(iscultist(user))
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='narsiesmall'>That is not yours to use!</span>")
|
||||
|
||||
#undef WORKPIECE_PRESENT
|
||||
#undef WORKPIECE_INPROGRESS
|
||||
#undef WORKPIECE_FINISHED
|
||||
#undef WORKPIECE_SLAG
|
||||
329
code/modules/smithing/finished_items.dm
Normal file
329
code/modules/smithing/finished_items.dm
Normal file
@@ -0,0 +1,329 @@
|
||||
|
||||
/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 = "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/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
var/quality
|
||||
var/overlay_state = "stick"
|
||||
var/mutable_appearance/overlay
|
||||
var/wielded_mult = 1
|
||||
var/wield_force = 15
|
||||
|
||||
/obj/item/melee/smith/Initialize()
|
||||
..()
|
||||
if(desc == "cringe")
|
||||
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
|
||||
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 = 10
|
||||
wielded_mult = 1.75
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/melee/smith/twohand/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad.
|
||||
AddElement(/datum/element/sword_point)
|
||||
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// 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."
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "minipick" //todo:sprite
|
||||
sharpness = SHARP_POINTY//it doesnt have a blade it has a point
|
||||
|
||||
/obj/item/mining_scanner/prospector/Initialize()
|
||||
..()
|
||||
var/mutable_appearance/overlay
|
||||
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."
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "pickaxe"
|
||||
sharpness = SHARP_POINTY
|
||||
|
||||
/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)
|
||||
if(force < 0)
|
||||
force = 0
|
||||
|
||||
/obj/item/pickaxe/smithed/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>Tool does not have a configureable dig range.</span>")
|
||||
|
||||
/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
|
||||
|
||||
/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)
|
||||
if(force < 0)
|
||||
force = 0
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// Spears //
|
||||
///////////////////////////
|
||||
|
||||
|
||||
/obj/item/melee/smith/twohand/halberd
|
||||
name = "halberd"
|
||||
icon_state = "halberd"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
overlay_state = "spearhandle"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
wielded_mult = 2.5
|
||||
|
||||
/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
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
sharpness = SHARP_POINTY
|
||||
|
||||
|
||||
/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"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
wielded_mult = 2
|
||||
|
||||
/obj/item/melee/smith/twohand/glaive/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/jousting)
|
||||
|
||||
|
||||
/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 //
|
||||
///////////////////////////
|
||||
|
||||
|
||||
/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.
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
|
||||
|
||||
/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"
|
||||
force = 9
|
||||
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
|
||||
force = 7
|
||||
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
|
||||
|
||||
/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"
|
||||
wielded_mult = 1.8
|
||||
|
||||
/obj/item/melee/smith/twohand/zweihander
|
||||
name = "zweihander"
|
||||
icon_state = "zwei"
|
||||
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.
|
||||
|
||||
/obj/item/melee/smith/twohand/katana
|
||||
name = "katana"
|
||||
icon_state = "katana"
|
||||
overlay_state = "katanahilt"
|
||||
force = 7
|
||||
wielded_mult = 2
|
||||
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
|
||||
name = "sabre"
|
||||
icon_state = "sabre"
|
||||
sharpness = SHARP_EDGED
|
||||
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"
|
||||
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
|
||||
|
||||
/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
|
||||
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/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/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!iscultist(user))
|
||||
user.DefaultCombatKnockdown(100)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.visible_message("<span class='warning'>A powerful force shoves [user] away from [target]!</span>", \
|
||||
"<span class='cultlarge'>\"You shouldn't be touching tools that aren't yours.\"</span>")
|
||||
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/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!is_servant_of_ratvar(user))
|
||||
user.DefaultCombatKnockdown(100)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.visible_message("<span class='warning'>A powerful force shoves [user] away from [target]!</span>", "<span class='neovgre'>\"You shouldn't be touching tools that aren't yours.\"</span>")
|
||||
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!!."
|
||||
qualitymod = 10
|
||||
75
code/modules/smithing/furnace.dm
Normal file
75
code/modules/smithing/furnace.dm
Normal file
@@ -0,0 +1,75 @@
|
||||
/obj/structure/furnace
|
||||
name = "furnace"
|
||||
desc = "A furnace."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "furnace0"
|
||||
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
|
||||
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))
|
||||
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
|
||||
..()
|
||||
|
||||
/obj/structure/furnace/wrench_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
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, "<span class='notice'>You start furiously plunging [name].")
|
||||
if(do_after(user, 30, target = src))
|
||||
to_chat(user, "<span class='notice'>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
|
||||
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."
|
||||
420
code/modules/smithing/smithed_items.dm
Normal file
420
code/modules/smithing/smithed_items.dm
Normal file
@@ -0,0 +1,420 @@
|
||||
/obj/item/basaltblock
|
||||
name = "basalt block"
|
||||
desc = "A block of basalt."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "sandvilnoir"
|
||||
|
||||
|
||||
/obj/item/smithing
|
||||
name = "base class /obj/item/smithing"
|
||||
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
|
||||
var/artifact = FALSE
|
||||
|
||||
/obj/item/ingot
|
||||
name = "ingot"
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "ingot"
|
||||
material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX
|
||||
var/workability = 0
|
||||
|
||||
|
||||
/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, "<span class='notice'>You pick up the [src].</span>")
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You try to move the [src], but you burn your hand on it!</span>")
|
||||
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/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/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, finishingitem))
|
||||
qdel(I)
|
||||
startfinish()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/smithing/proc/startfinish()
|
||||
dofinish()
|
||||
|
||||
/obj/item/smithing/proc/dofinish()
|
||||
var/qualname
|
||||
switch(quality)
|
||||
if(-1000 to -5)
|
||||
qualname = "awful"
|
||||
if(-1000 to -2)
|
||||
qualname = "shoddy"
|
||||
if(-1000 to -1)
|
||||
qualname = "poor"
|
||||
if(-1 to 1)
|
||||
qualname = "normal"
|
||||
if(10 to INFINITY)
|
||||
qualname = "legendary"
|
||||
if(7.5 to 10)
|
||||
qualname = "masterwork"
|
||||
if(5.5 to 7.5)
|
||||
qualname = "excellent"
|
||||
if(3.5 to 5.5)
|
||||
qualname = "good"
|
||||
if(0 to 3.5)
|
||||
qualname = "above-average"
|
||||
var/datum/material/mat = custom_materials[1]
|
||||
finalitem.set_custom_materials(custom_materials)
|
||||
mat = mat.name
|
||||
if(artifact)
|
||||
dwarfyartifact(finalitem, mat)
|
||||
else
|
||||
finalitem.name = "[qualname] [mat] [initial(finalitem.name)]"
|
||||
finalitem.desc = "A [qualname] [initial(finalitem.name)]. Its quality is [quality]."
|
||||
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. It "
|
||||
switch(pick(1,2,3,4,5))
|
||||
if(1)
|
||||
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)
|
||||
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 += "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.
|
||||
|
||||
/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)
|
||||
finalforreal.force += quality/2
|
||||
finalforreal.qualitymod = quality/4
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/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)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/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)
|
||||
finalitem.force += quality/2
|
||||
if(quality > 0)
|
||||
finalitem.toolspeed = max(0.05,(1-(quality/10)))
|
||||
else
|
||||
finalitem.toolspeed *= max(1, (quality * -1))
|
||||
..()
|
||||
|
||||
/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)
|
||||
finalitem.force += quality
|
||||
..()
|
||||
|
||||
/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]")
|
||||
finalforreal.throwforce = finalforreal.force*2
|
||||
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"
|
||||
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)
|
||||
finalforreal.force += quality/2
|
||||
if(quality > 0)
|
||||
finalforreal.toolspeed = max(0.05,(1-(quality/10)))
|
||||
else
|
||||
finalforreal.toolspeed *= max(1, (quality * -1))
|
||||
switch(quality)
|
||||
if(10 to INFINITY)
|
||||
finalforreal.digrange = 4
|
||||
if(5 to 9)
|
||||
finalforreal.digrange = 3
|
||||
if(3,4)
|
||||
finalforreal.digrange = 2
|
||||
else
|
||||
finalforreal.digrange = 1
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
|
||||
/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)
|
||||
finalforreal.range = 2 + quality
|
||||
if(quality)
|
||||
finalforreal.cooldown = 100/quality
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/smithing/shortswordblade
|
||||
name = "smithed gladius 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)
|
||||
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/scimitarblade/startfinish()
|
||||
finalitem = new /obj/item/melee/smith/shortsword/scimitar(src)
|
||||
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/sabreblade/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"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/kitchen/knife
|
||||
icon_state = "dagger"
|
||||
|
||||
/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)
|
||||
if(finalitem.force < 0)
|
||||
finalitem.force = 0
|
||||
finalitem.material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
..()
|
||||
|
||||
/obj/item/smithing/broadblade
|
||||
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]")
|
||||
finalitem = finalforreal
|
||||
..()
|
||||
|
||||
/obj/item/smithing/zweiblade
|
||||
name = "smithed zweihander blade"
|
||||
finishingitem = /obj/item/swordhandle
|
||||
finalitem = /obj/item/melee/smith/twohand/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)
|
||||
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
|
||||
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]")
|
||||
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/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
|
||||
finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]")
|
||||
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]")
|
||||
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."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "stick"
|
||||
force = 7
|
||||
|
||||
/obj/item/swordhandle
|
||||
name = "sword handle"
|
||||
desc = "It's a crudlely shaped wooden sword hilt."
|
||||
icon = 'icons/obj/smith.dmi'
|
||||
icon_state = "shorthilt"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
BIN
icons/obj/smith.dmi
Normal file
BIN
icons/obj/smith.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -648,6 +648,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"
|
||||
@@ -3308,6 +3309,10 @@
|
||||
#include "code\modules\shuttle\shuttle_creation\shuttle_creator_eye.dm"
|
||||
#include "code\modules\shuttle\shuttle_creation\shuttle_creator_overlay.dm"
|
||||
#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"
|
||||
#include "code\modules\spells\spell_types\area_teleport.dm"
|
||||
|
||||
Reference in New Issue
Block a user