diff --git a/__DEFINES/_macros.dm b/__DEFINES/_macros.dm index 34fadd7ad19..e984ac3de89 100644 --- a/__DEFINES/_macros.dm +++ b/__DEFINES/_macros.dm @@ -132,6 +132,8 @@ #define iswelder(A) istype(A, /obj/item/weapon/weldingtool) +#define ishammer(A) is_type_in_list(A, list(/obj/item/weapon/hammer, /obj/item/weapon/storage/toolbox)) + #define iscablecoil(A) istype(A, /obj/item/stack/cable_coil) #define iscoin(A) is_type_in_list(A, list(/obj/item/weapon/coin, /obj/item/weapon/reagent_containers/food/snacks/chococoin)) @@ -241,6 +243,7 @@ #define isERT(H) (H.mind && H.mind.GetRole(RESPONDER)) +#define hasanvil(H) (isturf(H) && (locate(/obj/item/anvil) in H)) diff --git a/__DEFINES/math_physics.dm b/__DEFINES/math_physics.dm index 9ad9cf125e7..dadeffad26f 100644 --- a/__DEFINES/math_physics.dm +++ b/__DEFINES/math_physics.dm @@ -37,9 +37,17 @@ #define MELTPOINT_GLASS (1500+T0C) #define MELTPOINT_STEEL (1510+T0C) +#define MELTPOINT_PLASMA (MELTPOINT_STEEL+500) #define MELTPOINT_SILICON 1687 // KELVIN #define MELTPOINT_PLASTIC (180+T0C) #define MELTPOINT_SNOW 304.15 //about 30°C +#define MELTPOINT_CARBON (T0C+3550) +#define MELTPOINT_GOLD (T0C+1064) +#define MELTPOINT_SILVER (T0C+961.8) +#define MELTPOINT_URANIUM (T0C+1132) +#define MELTPOINT_POTASSIUM (T0C+63.5) +#define MELTPOINT_BRASS (T0C+940) +#define MELTPOINT_MITHRIL (T0C+893) //Using sterling silver (because silver steel) as base // The highest number supported is a signed 32-bit floating point number. // Integers beyond the 24 bit range are represented as single-precision floating points, and thus will lose accuracy beyond the range of +/- 16777216 diff --git a/__DEFINES/reagents.dm b/__DEFINES/reagents.dm index 83088635d57..0b329a5c49a 100644 --- a/__DEFINES/reagents.dm +++ b/__DEFINES/reagents.dm @@ -399,6 +399,7 @@ #define TEMPERATURE_FLAME 700 #define TEMPERATURE_WELDER 3480 #define TEMPERATURE_PLASMA 4500 +#define TEMPERATURE_ETHANOL (T0C+1560) #define HEAT_TRANSFER_MULTIPLIER 7 //Multiplies the numbers above when heating a reagent container. A truly magical number. // By defining the effect multiplier this way, it'll exactly adjust diff --git a/code/game/objects/items/anvil.dm b/code/WorkInProgress/MadmanMartian/blacksmithing/anvil.dm similarity index 58% rename from code/game/objects/items/anvil.dm rename to code/WorkInProgress/MadmanMartian/blacksmithing/anvil.dm index c55ef1a1a23..1d48370e205 100644 --- a/code/game/objects/items/anvil.dm +++ b/code/WorkInProgress/MadmanMartian/blacksmithing/anvil.dm @@ -1,6 +1,6 @@ /** Anvil - Is treated as an item that can not be picked up, unless you are incredibly strong. - + Is treated as an item that can not be picked up, pushed, or pulled, unless you are incredibly strong. + Can place blacksmithing placeholders onto it like a table. Necessary to actually hammer them into shape. **/ /obj/item/anvil @@ -10,6 +10,7 @@ icon = 'icons/obj/blacksmithing.dmi' icon_state = "anvil" impactsound = 'sound/misc/clang.ogg' + layer = TABLE_LAYER flags = FPRINT | TWOHANDABLE | MUSTTWOHAND density = 1 throwforce = 40 @@ -30,4 +31,13 @@ /obj/item/anvil/check_airflow_movable(n) if(n > 1000) return TRUE - return FALSE \ No newline at end of file + return FALSE + +/obj/item/anvil/can_be_pushed(mob/living/user) + return user.get_strength() >= 2 + +/obj/item/anvil/attackby(obj/item/W, mob/user, params) + if(user.drop_item(W, src.loc)) + if(W.loc == src.loc && params) + W.setPixelOffsetsFromParams(params, user) + return 1 diff --git a/code/WorkInProgress/MadmanMartian/blacksmithing/blacksmithing.dm b/code/WorkInProgress/MadmanMartian/blacksmithing/blacksmithing.dm new file mode 100644 index 00000000000..207ff225c39 --- /dev/null +++ b/code/WorkInProgress/MadmanMartian/blacksmithing/blacksmithing.dm @@ -0,0 +1,125 @@ +/** + Put /obj/smithing_placeholder into a heatsource that is 90% of the melting temperature of that material to heat it up temporarily (spawn 10 seconds) + + If struck by a blunt object (preferably a hammer, but a toolbox can work) enough times before it cools, it will make the object. + + Can then choose to keep striking it to potentially increase its quality, but each time doubles the chance of failure per swing. +**/ + +/obj/item/smithing_placeholder + name = "placeholder" + desc = "An incomplete object, that requires forging and striking." + var/obj/result + var/malleable = FALSE + var/strikes_required + var/strikes + +/obj/item/smithing_placeholder/Destroy() + result = null + ..() + +/obj/item/smithing_placeholder/New(loc, var/obj/item/stack/S, var/obj/R, var/required_strikes) + ..() + if(istype(S, /obj/item/stack/sheet/)) + var/obj/item/stack/sheet/SS = S + var/datum/materials/materials_list = new + material_type = materials_list.getMaterial(SS.mat_type) + qdel(materials_list) + else if(S.material_type) + material_type = S.material_type + result = R + R.forceMove(null) + var/obj/item/stack/sheet/mineral/M = material_type.sheettype + appearance = initial(M.appearance) + desc = initial(desc) + strikes_required = required_strikes + +/obj/item/smithing_placeholder/examine(mob/user) + ..() + to_chat(user, "[strikes?"It looks like it has been struck [strikes] times.":"It has not been struck yet."]
It is [malleable?"malleable":"not malleable"].[strikes_requiredIt looks to be finished, and just needs quenching.":""]") + + +/obj/item/smithing_placeholder/afterattack(atom/A, mob/user, proximity_flag, click_parameters) + if(!proximity_flag) + return + if(isobj(A)) + var/obj/O = A + if(O.is_hot()) + heat(O.is_hot(), O, user) + if(O.is_open_container() && O.reagents.has_reagent(WATER, 60)) + quench(O, user) + if(istype(A, /mob/living/simple_animal/hostile/asteroid/magmaw)) //Until we have flameslimes, lavalizards, crimson pyromancers, or flaming skeletons, this will be hardcoded + var/mob/living/simple_animal/hostile/asteroid/magmaw/M = A + if(M.isDead()) + return + var/temperature + switch(M.fire_extremity) + if(0) + temperature = MELTPOINT_GOLD + if(1) + temperature = MELTPOINT_STEEL + if(2) + temperature = MELTPOINT_MITHRIL + heat(temperature, M, user) + +/obj/item/smithing_placeholder/attackby(obj/item/I, mob/user) + if(ishammer(I)) + strike(I, user) + user.delayNextAttack(1 SECONDS) + else if (I.is_hot()) + heat(I.is_hot(), I, user) + +/obj/item/smithing_placeholder/attempt_heating(var/atom/A, mob/user) + if(user) + to_chat(user, "You attempt to heat \the [src] with \the [A].") + heat(A.is_hot(), A, user) + +/obj/item/smithing_placeholder/proc/heat(var/temperature, var/atom/A, mob/user) + if(malleable) + return + if(temperature < ((material_type.melt_temperature/10)*9)) + if(user) + to_chat(user, "\The [A] is not hot enough.") + return + if(!do_after(user, A, 4 SECONDS)) + return + if(user) + to_chat(user, "You heat \the [src].") + malleable = TRUE + + +/obj/item/smithing_placeholder/proc/strike(atom/A, mob/user) + if(!malleable) + to_chat(user, "\The [src] has gone cool. It can not be manipulated in this state.") + return + if(!hasanvil(loc)) + to_chat(user, "There is no anvil to shape \the [src] over.") + return + playsound(loc, 'sound/items/hammer_strike.ogg', 50, 1) + if(istype(A,/obj/item/weapon/hammer)) + strikes++ + else if(istype(A,/obj/item/weapon/storage/toolbox)) + strikes+=0.25 + if(strikes == strikes_required) + to_chat(user, "\The [src] seems to have taken shape nicely.") + if(strikes > strikes_required) + if(prob(5*(strikes/strikes_required))) + to_chat(user, "\The [src] becomes brittle and unmalleable.") + var/obj/item/weapon/ore/slag/S = new /obj/item/weapon/ore/slag(get_turf(src)) + recycle(S.mats) + result.recycle(S.mats) + qdel(result) + qdel(src) + + +/obj/item/smithing_placeholder/proc/quench(obj/O, mob/user) + if(strikes < strikes_required) + to_chat(user, "\The [src] is not finished yet!") + return 0 + playsound(loc, 'sound/machines/hiss.ogg', 50, 1) + O.reagents.remove_reagent(WATER, 20) + var/datum/material/mat = material_type + if(mat) + result.dorfify(mat) + result.forceMove(get_turf(src)) + qdel(src) \ No newline at end of file diff --git a/code/WorkInProgress/MadmanMartian/blacksmithing/forge.dm b/code/WorkInProgress/MadmanMartian/blacksmithing/forge.dm new file mode 100644 index 00000000000..cdb292f91cb --- /dev/null +++ b/code/WorkInProgress/MadmanMartian/blacksmithing/forge.dm @@ -0,0 +1,111 @@ +/** + Blacksmithing forge + Takes chunks of plasma ore, or plasma sheets, to generate high temperatures for molding or melting metal. +**/ + +/obj/structure/forge + name = "forge" + desc = "A fire contained within heat-proof stone. This lets the internal temperature develop enough to make metal malleable or liquid." + icon = 'icons/obj/blacksmithing.dmi' + icon_state = "furnace_off" + anchored = TRUE + density = TRUE + var/status = FALSE //Whether the forge is lit + var/obj/item/heating //What is contained within the forge, and is being heated + var/fuel_time //How long is left, in deciseconds + var/current_temp + var/current_thermal_energy + +/obj/structure/forge/update_icon() + if(status) + icon_state = "furnace_on" + else + icon_state = "furnace_off" + +/obj/structure/forge/Destroy() + processing_objects.Remove(src) + heating.forceMove(get_turf(src)) + heating = null + for(var/obj/I in contents) + qdel(I) + ..() + +/obj/structure/forge/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/stack/sheet/mineral/plasma)) + var/obj/item/stack/sheet/mineral/plasma/P = I + if(P.use(1)) + to_chat(user, "You toss a sheet of \the [I] into \the [src].") + if(current_temp < TEMPERATURE_PLASMA) + current_temp = TEMPERATURE_PLASMA + fuel_time+= 60 SECONDS + return + else if(istype(I, /obj/item/weapon/ore/plasma)) + to_chat(user, "You toss \the [I] into \the [src].") + user.drop_item(I) + qdel(I) + if(current_temp < MELTPOINT_STEEL) + current_temp = MELTPOINT_STEEL + fuel_time += 20 SECONDS + return + else if(I.is_hot() && status == FALSE) + to_chat(user, "You attempt to light \the [src] with \the [I].") + if(do_after(user, I, 3 SECONDS)) + if(!has_fuel()) + to_chat(user, "\The [src] does not light.") + return + toggle_lit() + else if(!heating) + if(user.drop_item(I, src)) + to_chat(user, "You place \the [I] into \the [src].") + heating = I + return + ..() + +/obj/structure/forge/proc/toggle_lit() + switch(status) + if(TRUE) //turning it off + status = FALSE + processing_objects.Remove(src) + if(FALSE)//turning it on + status = TRUE + processing_objects.Add(src) + on_fire = status + update_icon() + return status + +/obj/structure/forge/attack_hand(mob/user) + if(heating) + to_chat(user, "You retrieve \the [heating] from \the [src].") + user.put_in_hands(heating) + heating = null + + +/obj/structure/forge/examine(mob/user) + ..() + if(heating) + to_chat(user, "There is currently \a [heating] in \the [src].") + to_chat(user, "\The [src] is [status?"lit":"unlit"][fuel_time>1?" and has fuel.":""]") + +/obj/structure/forge/process() + if(!has_fuel()) + return + if(heating) + heating.attempt_heating(src, null) + + +//Prefer to burn through sheets over ores +/obj/structure/forge/proc/has_fuel() + fuel_time = max(0, fuel_time-1) + if(fuel_time <= 0 && status) + toggle_lit() + return fuel_time + +/obj/structure/forge/is_hot() + return current_temp + +/obj/structure/forge/thermal_energy_transfer() + return current_thermal_energy + +/obj/structure/forge/extinguish() + if(status) + toggle_lit() \ No newline at end of file diff --git a/code/WorkInProgress/MadmanMartian/blacksmithing/misc_components.dm b/code/WorkInProgress/MadmanMartian/blacksmithing/misc_components.dm new file mode 100644 index 00000000000..4c7483179f6 --- /dev/null +++ b/code/WorkInProgress/MadmanMartian/blacksmithing/misc_components.dm @@ -0,0 +1,37 @@ +/obj/item/item_head + icon = 'icons/obj/misc_components.dmi' + var/obj/item/result + +/obj/item/item_head/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/item_handle)) + to_chat(user, "You begin to attach \the [I] to \the [src].") + if(do_after(user, src, 4 SECONDS)) + user.drop_item(I) + user.drop_item(src) + result = new result + var/datum/material/mat = material_type + if(mat) + result.dorfify(mat) + qdel(I) + qdel(src) + user.put_in_hands(result) + return + ..() + +/obj/item/item_head/hammer_head + name = "hammer head" + icon_state = "hammer_head" + desc = "unlike the shark, this one lacks bite." + result = /obj/item/weapon/hammer + +/obj/item/item_head/pickaxe_head + name = "pickaxe head" + icon_state = "pickaxe_head" + desc = "To strike the earth, you will need a handle on the situation" + result = /obj/item/weapon/pickaxe + +/obj/item/item_handle + name = "item handle" + icon = 'icons/obj/misc_components.dmi' + icon_state = "item_handle" + desc = "a generic handle, with no purpose." \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 9db58481e0f..5241d420066 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -938,3 +938,9 @@ its easier to just keep the beam vertical. to_chat(user, "\The [src] is full.") return INJECTION_RESULT_FAIL return INJECTION_RESULT_SUCCESS + +/atom/proc/is_hot() + return + +/atom/proc/thermal_energy_transfer() + return \ No newline at end of file diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ebaf0d208b7..5fe1e349c62 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1020,3 +1020,6 @@ if(Lag > 0) set_glide_size(DELAY2GLIDESIZE(Lag)) walk_to(src,Trg,Min,Lag,Speed) + +/atom/movable/proc/can_be_pushed(mob/user) + return 1 \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 11d4addc8db..232b9203590 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1297,3 +1297,17 @@ var/global/list/image/blood_overlays = list() /obj/item/proc/pre_throw() return + +/** + Attempt to heat this object from a presumed heat source. + @args: + A: Atom: The source of the heat + user: mob: Whomever may be trying to heat this object + + @return: + TRUE if succesful + FALSE if not succesful + NULL if override not defined +**/ +/obj/item/proc/attempt_heating(atom/A, mob/user) + return \ No newline at end of file diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index efd3b706ff8..ddaa668f672 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -143,3 +143,24 @@ to_chat(user, "You assembled a grille!") Grille.add_fingerprint(user) use(2) + + +/obj/item/stack/chains + name = "chain" + desc = "link by link, my chain got longer." + icon_state = "chains" + max_amount = 20 + +/obj/item/stack/chains/can_stack_with(var/obj/item/other_stack) + if(!ispath(other_stack) && istype(other_stack) && other_stack.material_type == material_type) + return ..() + return 0 + +/obj/item/stack/chains/New(var/loc, var/amount=null) + recipes = chain_recipes + ..() + +var/list/datum/stack_recipe/chain_recipes = list ( + new/datum/stack_recipe/blacksmithing("Suit of Chainmail", /obj/item/clothing/suit/armor/vest/chainmail, 10, time = 100,required_strikes = 15), + new/datum/stack_recipe/blacksmithing("Chainmail Coif", /obj/item/clothing/head/helmet/chainmail, 5, time = 100,required_strikes = 15), + ) \ No newline at end of file diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 291990b10f8..9f3f807c4db 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -88,8 +88,8 @@ var/list/datum/stack_recipe/sandstone_recipes = list ( \ var/list/datum/stack_recipe/diamond_recipes = list ( \ new/datum/stack_recipe("diamond floor tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20), \ new/datum/stack_recipe("diamond door", /obj/machinery/door/mineral/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE) ) /obj/item/stack/sheet/mineral/diamond/New(var/loc, var/amount=null) @@ -118,8 +118,8 @@ var/list/datum/stack_recipe/diamond_recipes = list ( \ var/list/datum/stack_recipe/uranium_recipes = list ( \ new/datum/stack_recipe("uranium floor tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \ new/datum/stack_recipe("uranium door", /obj/machinery/door/mineral/uranium, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE) ) /obj/item/stack/sheet/mineral/uranium/New(var/loc, var/amount=null) @@ -148,8 +148,8 @@ var/list/datum/stack_recipe/uranium_recipes = list ( \ var/list/datum/stack_recipe/plasma_recipes = list ( \ new/datum/stack_recipe("plasma floor tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ new/datum/stack_recipe("plasma door", /obj/machinery/door/mineral/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE) ) /obj/item/stack/sheet/mineral/plasma/New(var/loc, var/amount=null) @@ -225,8 +225,9 @@ var/list/datum/stack_recipe/gold_recipes = list ( \ new/datum/stack_recipe("golden floor tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \ new/datum/stack_recipe("golden door", /obj/machinery/door/mineral/gold, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("gold tooth", /obj/item/stack/teeth/gold, 1, 1, 20), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20,one_per_turf = 1, on_floor = 1, inherit_material = TRUE),\ - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20,one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE),\ + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("chain", /obj/item/stack/chains, 2, 1, 20, 5, inherit_material = TRUE) ) /obj/item/stack/sheet/mineral/gold/New(var/loc, var/amount=null) @@ -238,8 +239,8 @@ var/list/datum/stack_recipe/gold_recipes = list ( \ */ var/list/datum/stack_recipe/phazon_recipes = list( \ new/datum/stack_recipe("phazon floor tile", /obj/item/stack/tile/mineral/phazon, 1, 40, 20), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20,one_per_turf = 1, on_floor = 1, inherit_material = TRUE),\ - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20,one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE),\ + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE) ) /obj/item/stack/sheet/mineral/phazon @@ -283,8 +284,9 @@ var/list/datum/stack_recipe/phazon_recipes = list( \ var/list/datum/stack_recipe/silver_recipes = list ( \ new/datum/stack_recipe("silver floor tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20), \ new/datum/stack_recipe("silver door", /obj/machinery/door/mineral/silver, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20,one_per_turf = 1, on_floor = 1, inherit_material = TRUE),\ - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20,one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE),\ + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("chain", /obj/item/stack/chains, 2, 1, 20, 5, inherit_material = TRUE) ) /obj/item/stack/sheet/mineral/silver/New(var/loc, var/amount=null) @@ -311,8 +313,8 @@ var/list/datum/stack_recipe/silver_recipes = list ( \ var/list/datum/stack_recipe/clown_recipes = list ( \ new/datum/stack_recipe("bananium floor tile", /obj/item/stack/tile/mineral/clown, 1, 40, 20), \ - new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE),\ - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("dorf chair",/obj/structure/bed/chair, 20, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE),\ + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 12, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE) ) /obj/item/stack/sheet/mineral/clown/New(var/loc, var/amount=null) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 0c2be1f70fd..39c02c17c74 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -210,13 +210,14 @@ var/obj/item/stack/S = O S.update_materials() else - O = new R.result_type( usr.loc ) + for(var/i = 1 to (R.max_res_amount>1 ? R.res_amount*multiplier : 1)) + O = new R.result_type( usr.loc ) O.dir = usr.dir if(R.start_unanchored) var/obj/A = O A.anchored = 0 - R.finish_building(usr, src, O) + var/put_in_hand = R.finish_building(usr, src, O) //if (R.max_res_amount>1) // var/obj/item/stack/new_item = O @@ -231,7 +232,7 @@ //src = null //dont kill proc after del() usr.before_take_item(oldsrc) returnToPool(oldsrc) - if (istype(O,/obj/item)) + if (put_in_hand && istype(O,/obj/item)) usr.put_in_hands(O) O.add_fingerprint(usr) //BubbleWrap - so newly formed boxes are empty //This is pretty shitcode but I'm not fixing it because even if sloth is a sin I am already going to hell anyways diff --git a/code/game/objects/items/stacks/stack_recipes.dm b/code/game/objects/items/stacks/stack_recipes.dm index 498daf70533..d848f92088b 100644 --- a/code/game/objects/items/stacks/stack_recipes.dm +++ b/code/game/objects/items/stacks/stack_recipes.dm @@ -35,7 +35,7 @@ return 1 /datum/stack_recipe/proc/finish_building(var/mob/usr, var/obj/item/stack/S, var/R) //This will be called after the recipe is done building, useful for doing something to the result if you want. - return + return 1 //Recipe list datum /datum/stack_recipe_list @@ -86,34 +86,31 @@ if(istype(S, /obj/item/stack/sheet/)) var/obj/item/stack/sheet/SS = S mat = materials_list.getMaterial(SS.mat_type) - if(mat) - var/icon/original = icon(R.icon, R.icon_state) - if(mat.color) - original.ColorTone(mat.color) - var/obj/item/I = R - if(istype(I)) - var/icon/t_state - for(var/hand in list("left_hand", "right_hand")) - t_state = icon(I.inhand_states[hand], I.item_state) - t_state.ColorTone(mat.color) - I.inhand_states[hand] = t_state - else if(mat.color_matrix) - R.color = mat.color_matrix - R.icon = original - R.alpha = mat.alpha - R.material_type = mat - R.sheet_type = mat.sheettype - //if(gen_quality) - R.gen_quality() - if(R.quality > SUPERIOR) - R.gen_description() - if(!findtext(lowertext(R.name), lowertext(mat.name))) - R.name = "[R.quality == NORMAL ? "": "[lowertext(qualityByString[R.quality])] "][lowertext(mat.name)] [R.name]" + else if(S.material_type) + mat = S.material_type + R.dorfify(mat) + return 1 + + +/datum/stack_recipe/blacksmithing + var/req_strikes = 15 + +/datum/stack_recipe/blacksmithing/New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, start_unanchored = 0, other_reqs = list(), inherit_material = FALSE, gen_quality = FALSE, required_strikes = 0) + ..() + src.req_strikes = required_strikes + +/datum/stack_recipe/blacksmithing/finish_building(mob/usr, var/obj/item/stack/S, var/obj/R) + //Yeah nah let's put you in a blacksmith_placeholder + var/obj/item/I = new /obj/item/smithing_placeholder(usr.loc,S, R, req_strikes) + I.name = "unforged [R.name]" + return 0 + var/list/datum/stack_recipe/metal_recipes = list ( new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 60), new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), new/datum/stack_recipe("conveyor belt", /obj/item/stack/conveyor_assembly, 2, 1, 20), + new/datum/stack_recipe/dorf("chain", /obj/item/stack/chains, 2, 1, 20, 5, inherit_material = TRUE), null, new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1 ), new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), @@ -135,7 +132,7 @@ var/list/datum/stack_recipe/metal_recipes = list ( new/datum/stack_recipe/chair("chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1), new/datum/stack_recipe/chair("folding chair", /obj/structure/bed/chair/folding, one_per_turf = 1, on_floor = 1), new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1), - new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, inherit_material = TRUE), + new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), )), new/datum/stack_recipe_list("couch parts", list( new/datum/stack_recipe/chair("beige couch left end", /obj/structure/bed/chair/comfy/couch/left/beige, 2, one_per_turf = 1, on_floor = 1), @@ -227,7 +224,11 @@ var/list/datum/stack_recipe/metal_recipes = list ( null, new/datum/stack_recipe("iron door", /obj/machinery/door/mineral/iron, 20, one_per_turf = 1, on_floor = 1), new/datum/stack_recipe("stove", /obj/machinery/space_heater/campfire/stove, 5, time = 25, one_per_turf = 1, on_floor = 1), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = 1, inherit_material = TRUE), + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), + null, + new/datum/stack_recipe/blacksmithing("hammer head", /obj/item/item_head/hammer_head, 4, time = 5 SECONDS, required_strikes = 6), + new/datum/stack_recipe/blacksmithing("pickaxe head", /obj/item/item_head/pickaxe_head, 4, time = 5 SECONDS, required_strikes = 8), + new/datum/stack_recipe/blacksmithing("sword blade", /obj/item/weapon/metal_blade, 8, time = 8 SECONDS, required_strikes = 13), ) /* ======================================================================== @@ -243,7 +244,7 @@ var/list/datum/stack_recipe/plasteel_recipes = list ( new/datum/stack_recipe("Fireaxe cabinet", /obj/item/mounted/frame/fireaxe_cabinet_frame, 2, time = 50 ), null, new/datum/stack_recipe("Vault Door assembly", /obj/structure/door_assembly/door_assembly_vault, 8, time = 50, one_per_turf = 1, on_floor = 1), - new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, inherit_material = TRUE), + new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), ) /* ==================================================================== @@ -257,7 +258,7 @@ var/list/datum/stack_recipe/wood_recipes = list ( null, new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/wood, 2 ), new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood/normal, 1, time = 10, one_per_turf = 1, on_floor = 1), - new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, inherit_material = TRUE), + new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE), new/datum/stack_recipe("throne", /obj/structure/bed/chair/wood/throne, 40, time = 100, one_per_turf = 1, on_floor = 1), new/datum/stack_recipe("bookcase", /obj/structure/bookcase, 5, time = 50, one_per_turf = 1, on_floor = 1), new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), @@ -280,8 +281,9 @@ var/list/datum/stack_recipe/wood_recipes = list ( null, new/datum/stack_recipe("boomerang", /obj/item/weapon/boomerang, 6, time = 50 ), new/datum/stack_recipe("buckler", /obj/item/weapon/shield/riot/buckler, 5, time = 50 ), + new/datum/stack_recipe("item handle", /obj/item/item_handle, 1,2,20, time = 2 SECONDS ), new/datum/stack_recipe("wooden paddle", /obj/item/weapon/macuahuitl, 1, time = 50 ), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = 1, inherit_material = TRUE) + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = 1, inherit_material = TRUE, gen_quality = TRUE) ) /* ========================================================================= @@ -316,6 +318,7 @@ var/list/datum/stack_recipe/cardboard_recipes = list ( R.name = "[L.source_string ? "[L.source_string]" : ""] [R.name]" else R.name = "[L.source_string ? "[L.source_string] leather " : ""] [R.name]" + return 1 var/list/datum/stack_recipe/leather_recipes = list ( new/datum/stack_recipe/leather("Bullwhip", /obj/item/weapon/bullwhip, 10, time = 100,), @@ -337,8 +340,8 @@ var/list/datum/stack_recipe/brass_recipes = list ( new/datum/stack_recipe("brass full window", /obj/structure/window/full/reinforced/clockwork, 4, time = 20, one_per_turf = TRUE, on_floor = TRUE, other_reqs = list(/obj/item/stack/sheet/ralloy = 1)), new/datum/stack_recipe("brass table parts", /obj/item/weapon/table_parts/clockwork, 4), new/datum/stack_recipe("clockwork girders", /obj/structure/girder/clockwork, 3, time = 70, one_per_turf = TRUE, on_floor = TRUE, other_reqs = list(/obj/item/stack/sheet/ralloy = 3)), - new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = TRUE, on_floor = TRUE, inherit_material = TRUE), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = TRUE, inherit_material = TRUE), + new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = TRUE, on_floor = TRUE, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = TRUE, inherit_material = TRUE, gen_quality = TRUE), ) /* ======================================================================== @@ -347,6 +350,6 @@ var/list/datum/stack_recipe/brass_recipes = list ( var/list/datum/stack_recipe/ralloy_recipes = list ( new/datum/stack_recipe("replicant grille", /obj/structure/grille/replicant, 2, time = 10, one_per_turf = TRUE, on_floor = TRUE), - new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = TRUE, on_floor = TRUE, inherit_material = TRUE), - new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = TRUE, inherit_material = TRUE), + new/datum/stack_recipe/dorf("dorf chair", /obj/structure/bed/chair, one_per_turf = TRUE, on_floor = TRUE, inherit_material = TRUE, gen_quality = TRUE), + new/datum/stack_recipe/dorf("training sword", /obj/item/weapon/melee/training_sword, 4, time = 12, on_floor = TRUE, inherit_material = TRUE, gen_quality = TRUE), ) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index bbfc185870a..eba083a5fb5 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -466,3 +466,11 @@ obj/item/weapon/banhammer/admin // base_overlay.appearance = appearance // base_overlay.plane = FLOAT_PLANE // overlays += base_overlay + + +/obj/item/weapon/hammer + name = "smithing hammer" + desc = "for those with a predeliction for applying concussive maintenance" + icon_state = "hammer" + force = 8 + hitsound = 'sound/weapons/toolbox.ogg' diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 3b1d8b23848..ecf1f1c8665 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -223,10 +223,10 @@ var/global/list/reagents_to_log = list(FUEL, PLASMA, PACID, SACID, AMUTATIONTOXI /obj/proc/is_sharp() return sharpness -/obj/proc/is_hot() //This returns the temperature of the object if possible +/obj/is_hot() //This returns the temperature of the object if possible return source_temperature -/obj/proc/thermal_energy_transfer() +/obj/thermal_energy_transfer() if(is_hot()) return heat_production return 0 @@ -634,7 +634,7 @@ a { var/mob/M = loc M.regenerate_icons() -/obj/proc/gen_quality() +/obj/proc/gen_quality(var/modifier = 0) var/material_mod = material_type ? material_type.quality_mod : 1 var/turf/T = get_turf(src) var/surrounding_mod = 1 @@ -642,7 +642,7 @@ a { for(var/obj/I in get_step(T, dir)) if(I.quality > NORMAL || I.quality < NORMAL) surrounding_mod *= I.quality/rand(1,3) - var/initial_quality = round((rand(1,3)*surrounding_mod)*material_mod) + var/initial_quality = round(((rand(1,3)*surrounding_mod)*material_mod)+modifier) quality = Clamp(initial_quality, AWFUL, LEGENDARY) /obj/proc/gen_description(mob/user) @@ -670,5 +670,29 @@ a { if(additional_description) desc = "[initial(desc)] \n [additional_description]" +/obj/proc/dorfify(var/datum/material/mat) + if(mat) + var/icon/original = icon(icon, icon_state) + if(mat.color) + original.ColorTone(mat.color) + var/obj/item/I = src + if(istype(I)) + var/icon/t_state + for(var/hand in list("left_hand", "right_hand")) + t_state = icon(I.inhand_states[hand], I.item_state) + t_state.ColorTone(mat.color) + I.inhand_states[hand] = t_state + else if(mat.color_matrix) + color = mat.color_matrix + icon = original + alpha = mat.alpha + material_type = mat + sheet_type = mat.sheettype + gen_quality() + if(quality > SUPERIOR) + gen_description() + if(!findtext(lowertext(name), lowertext(mat.name))) + name = "[quality == NORMAL ? "": "[lowertext(qualityByString[quality])] "][lowertext(mat.name)] [name]" + /obj/proc/check_uplink_validity() return TRUE diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 32cb5c08375..42dc46697c9 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -264,4 +264,13 @@ desc = "A fancy helmet for a fancy policeman." icon_state = "police_helmet" item_state = "police_helmet" - body_parts_covered = HEAD \ No newline at end of file + body_parts_covered = HEAD + +/obj/item/clothing/head/helmet/chainmail + name = "chainmail coif" + desc = "chains fashioned together to be a hood to wear over your head" + icon_state = "chainmail_head" + item_state = "chainmail_head" + armor = list(melee = 10, bullet = 15, laser = 2,energy = 2, bomb = 2, bio = 2, rad = 0) + flags = FPRINT + siemens_coefficient = 1 \ No newline at end of file diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index bce726e7f45..4af6d6b23a0 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -50,6 +50,13 @@ icon_state = "nr_vest" item_state = "nr_vest" +/obj/item/clothing/suit/armor/vest/chainmail + name = "chainmail" + desc = "A series of chains linked together in a way to look like a suit." + icon_state = "chainmail_torso" + item_state = "chainmail_torso" + armor = list(melee = 20, bullet = 35, laser = 10, energy = 10, bomb = 25, bio = 0, rad = 0) + /obj/item/clothing/suit/armor/riot name = "Riot Suit" desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." diff --git a/code/modules/mining/materials.dm b/code/modules/mining/materials.dm index fe5de3c07c0..8d888fa5eb7 100644 --- a/code/modules/mining/materials.dm +++ b/code/modules/mining/materials.dm @@ -136,6 +136,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New var/brunt_damage_mod = 1 var/sharpness_mod = 1 var/quality_mod = 1 + var/melt_temperature /datum/material/New() if(processed_name=="") @@ -159,6 +160,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New brunt_damage_mod = 1.1 sharpness_mod = 0.8 quality_mod = 1.1 + melt_temperature = MELTPOINT_STEEL /datum/material/glass name="Sand" @@ -172,6 +174,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New alpha = 122 brunt_damage_mod = 0.7 sharpness_mod = 1.4 + melt_temperature = MELTPOINT_GLASS /datum/material/glass/on_use(obj/source) if(!..()) @@ -195,6 +198,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New brunt_damage_mod = 1.4 sharpness_mod = 1.6 quality_mod = 2 + melt_temperature = MELTPOINT_CARBON /datum/material/plasma name="Plasma" @@ -226,6 +230,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New brunt_damage_mod = 0.5 sharpness_mod = 0.5 quality_mod = 1.7 + melt_temperature = MELTPOINT_GOLD /datum/material/silver name="Silver" @@ -238,6 +243,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New brunt_damage_mod = 0.7 sharpness_mod = 0.7 quality_mod = 1.5 + melt_temperature = MELTPOINT_SILVER /datum/material/uranium @@ -251,6 +257,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New brunt_damage_mod = 1.8 sharpness_mod = 0.2 quality_mod = 1.4 + melt_temperature = MELTPOINT_URANIUM /datum/material/uranium/on_use(obj/source, atom/target, mob/user) @@ -267,6 +274,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New oretype=/obj/item/weapon/ore/clown sheettype=/obj/item/stack/sheet/mineral/clown cointype=/obj/item/weapon/coin/clown + melt_temperature = MELTPOINT_POTASSIUM /datum/material/clown/New() if(!..()) @@ -352,6 +360,7 @@ var/global/list/initial_materials //Stores all the matids = 0 in helping New cointype = null cc_per_sheet = CC_PER_SHEET_METAL color = "#A97F1B" + melt_temperature = MELTPOINT_BRASS /datum/material/ralloy name = "Replicant Alloy" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ad77a3350c8..ca7b1789907 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1321,7 +1321,7 @@ Thanks. if (!now_pushing) now_pushing = 1 - if (!AM.anchored) + if (!AM.anchored && AM.can_be_pushed(src)) var/t = get_dir(src, AM) if(AM.flow_flags & ON_BORDER && !t) t = AM.dir diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index d6437b9ac5f..733dba3001d 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -374,9 +374,8 @@ var/list/LOGGED_SPLASH_REAGENTS = list(FUEL, THERMITE) ..() attempt_heating(I, user) -/obj/item/weapon/reagent_containers/proc/attempt_heating(obj/item/I, mob/user) - var/temperature = I.is_hot() - var/thermal_energy = I.thermal_energy_transfer() +/obj/item/weapon/reagent_containers/attempt_heating(atom/A, mob/user) + var/temperature = A.is_hot() if(temperature && reagents) - reagents.heating(thermal_energy, temperature) - to_chat(user, "You heat [src] with [I].") + reagents.heating(A.thermal_energy_transfer(), temperature) + to_chat(user, "You heat \the [src] with \the [A].") diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 16842c30667..ce0dfa97b20 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 6cd5bce5d2d..3bddaefaed2 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/blacksmithing.dmi b/icons/obj/blacksmithing.dmi index b3582d0fe8f..40ec1782c38 100644 Binary files a/icons/obj/blacksmithing.dmi and b/icons/obj/blacksmithing.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index ca2a893b1e7..ac276b81dd7 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index dd75266365f..81a3b299604 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 66b0aef2f6c..af1fcfd7054 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/misc_components.dmi b/icons/obj/misc_components.dmi new file mode 100644 index 00000000000..897c6d3f457 Binary files /dev/null and b/icons/obj/misc_components.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index e31e5d7d10f..f357d787f65 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/sound/items/hammer_strike.ogg b/sound/items/hammer_strike.ogg new file mode 100644 index 00000000000..72e41ad7943 Binary files /dev/null and b/sound/items/hammer_strike.ogg differ diff --git a/vgstation13.dme b/vgstation13.dme index fe1925fc601..9ea681af184 100644 --- a/vgstation13.dme +++ b/vgstation13.dme @@ -728,7 +728,6 @@ #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" #include "code\game\objects\items\airbag.dm" -#include "code\game\objects\items\anvil.dm" #include "code\game\objects\items\ashtray.dm" #include "code\game\objects\items\beacon.dm" #include "code\game\objects\items\blueprints.dm" @@ -2381,6 +2380,10 @@ #include "code\WorkInProgress\Cib\MedicalSideEffects.dm" #include "code\WorkInProgress\Cutelilduck\human_resources.dm" #include "code\WorkInProgress\kilakk\fax.dm" +#include "code\WorkInProgress\MadmanMartian\blacksmithing\anvil.dm" +#include "code\WorkInProgress\MadmanMartian\blacksmithing\blacksmithing.dm" +#include "code\WorkInProgress\MadmanMartian\blacksmithing\forge.dm" +#include "code\WorkInProgress\MadmanMartian\blacksmithing\misc_components.dm" #include "code\WorkInProgress\Mini\ATM.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\pomf\spacepods\actions.dm"