From e17800b4e9e88efe32495ed3ab4fbca568487008 Mon Sep 17 00:00:00 2001
From: cornercube <81207946+cornercube@users.noreply.github.com>
Date: Sat, 14 Dec 2024 22:00:55 +0800
Subject: [PATCH] my friend plank and some tools (#931)
* tools
* nolog
* Update weapons.dm
* Update tools.dm
* Update items.dm
* Update items.dm
* Update items.dm
* stuff
* Update carpenter.dm
* Update Lmason.dm
* Update tools.dm
* Update carpenter.dm
* Update tools.dm
* sz
* wood
* buyable
* Update tools.dm
* finishing touch
* additions
* Update turfs.dm
* woodflor
* fixed
* Update tools.dm
* Update tools.dm
* Update mason.dm
* Update tools.dm
* Update tools.dm
* stonesaw
* Update tools.dm
* Update crafting.dmi
* Update items.dm
* Update items.dm
* Update items.dm
* capitalized
* last touch
* Update structure.dm
* Update roguechair.dm
* Update items.dm
* Update items.dm
* Update structure.dm
---------
Co-authored-by: NPC1314 <110836368+NPC1314@users.noreply.github.com>
---
.../items/rogueitems/natural/stones.dm | 2 +-
.../objects/items/rogueitems/natural/wood.dm | 2 +-
.../structures/beds_chairs/roguechair.dm | 8 +-
code/modules/cargo/packsrogue/tools.dm | 11 +
.../adventurer/types/pilgrim/carpenter.dm | 3 +-
.../adventurer/types/pilgrim/rare/Lmason.dm | 1 +
.../jobs/job_types/roguetown/serfs/mason.dm | 3 +-
code/modules/roguetown/roguecrafting/items.dm | 61 ++++-
.../roguetown/roguecrafting/structure.dm | 24 +-
code/modules/roguetown/roguecrafting/turfs.dm | 103 +++++++-
.../blacksmith/anvil_recipes/tools.dm | 18 ++
.../blacksmith/anvil_recipes/weapons.dm | 4 +-
.../roguetown/roguejobs/craftsman/tools.dm | 232 ++++++++++++++++++
icons/roguetown/items/crafting.dmi | Bin 0 -> 3793 bytes
stonekeep.dme | 1 +
15 files changed, 445 insertions(+), 28 deletions(-)
create mode 100644 code/modules/roguetown/roguejobs/craftsman/tools.dm
create mode 100644 icons/roguetown/items/crafting.dmi
diff --git a/code/game/objects/items/rogueitems/natural/stones.dm b/code/game/objects/items/rogueitems/natural/stones.dm
index 04e6fd92e0..3d8fdd3280 100644
--- a/code/game/objects/items/rogueitems/natural/stones.dm
+++ b/code/game/objects/items/rogueitems/natural/stones.dm
@@ -2,7 +2,7 @@
/obj/item/natural/stone
name = "stone"
- desc = "A piece of rough ground stone."
+ desc = "A piece of rough ground stone. It could be chiseled into a shape more conducive to construction. "
icon_state = "stone1"
gripped_intents = null
dropshrink = 0.75
diff --git a/code/game/objects/items/rogueitems/natural/wood.dm b/code/game/objects/items/rogueitems/natural/wood.dm
index 3561974c19..327d3f4c82 100644
--- a/code/game/objects/items/rogueitems/natural/wood.dm
+++ b/code/game/objects/items/rogueitems/natural/wood.dm
@@ -44,7 +44,7 @@
/obj/item/grown/log/tree/small
name = "small log"
- desc = "A smaller log that came from a larger log. Suitable for building."
+ desc = "A smaller log that came from a larger log. With a saw, you could turn it into wooden planks."
icon_state = "logsmall"
attacked_sound = 'sound/misc/woodhit.ogg'
max_integrity = 30
diff --git a/code/game/objects/structures/beds_chairs/roguechair.dm b/code/game/objects/structures/beds_chairs/roguechair.dm
index 40899d079f..3e3225e7ca 100644
--- a/code/game/objects/structures/beds_chairs/roguechair.dm
+++ b/code/game/objects/structures/beds_chairs/roguechair.dm
@@ -303,7 +303,7 @@
buckle_lying = 90
pixel_y = 5
sleepy = 2
- debris = list(/obj/item/grown/log/tree/small = 1)
+ debris = list(/obj/item/natural/plank = 1)
// ------------ GOOD BEDS ----------------------
@@ -316,7 +316,7 @@
max_buckled_mobs = 2
pixel_y = 0
sleepy = 3
- debris = list(/obj/item/grown/log/tree/small = 2)
+ debris = list(/obj/item/natural/plank)
/// The mob who buckled to this bed second, to avoid other mobs getting pixel-shifted before they unbuckle.
var/mob/living/goldilocks
@@ -342,7 +342,7 @@
icon_state = "double_wool"
pixel_y = 0
sleepy = 2
- debris = list(/obj/item/grown/log/tree/small = 2)
+ debris = list(/obj/item/natural/plank = 2)
// ------------ ACCEPTABLE BEDS ----------------------
@@ -354,6 +354,7 @@
/obj/structure/bed/rogue/mediocre
icon_state = "shitbed2"
sleepy = 1
+ debris = list(/obj/item/grown/log/tree/small = 1)
// Inhumen boss bed. Sleeping on a bear! Kinda comfy, sort of
/obj/structure/bed/rogue/bear
@@ -370,6 +371,7 @@
name = "uncomfortable bed"
icon_state = "shitbed"
sleepy = 0.5
+ debris = list(/obj/item/grown/log/tree/small = 1)
/obj/structure/bed/rogue/sleepingbag
name = "sleepcloth"
diff --git a/code/modules/cargo/packsrogue/tools.dm b/code/modules/cargo/packsrogue/tools.dm
index f615ac3124..6fbdcf41d0 100644
--- a/code/modules/cargo/packsrogue/tools.dm
+++ b/code/modules/cargo/packsrogue/tools.dm
@@ -101,6 +101,17 @@
cost = 15
contains = /obj/item/rogueweapon/hoe
+/datum/supply_pack/rogue/tools/handsaw
+ name = "handsaw"
+ cost = 12
+ contains = /obj/item/rogueweapon/handsaw
+
+/datum/supply_pack/rogue/tools/chisel
+ name = "chisel"
+ cost = 12
+ contains = list(/obj/item/rogueweapon/chisel,
+ /obj/item/rogueweapon/chisel)
+
/datum/supply_pack/rogue/tools/bottle
name = "Glass Bottle"
cost = 3
diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/carpenter.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/carpenter.dm
index 68dfc407ed..971881d492 100644
--- a/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/carpenter.dm
+++ b/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/carpenter.dm
@@ -41,7 +41,8 @@
beltr = /obj/item/storage/belt/rogue/pouch/coins/poor
beltl = /obj/item/rogueweapon/hammer/claw
backl = /obj/item/storage/backpack/rogue/backpack
- backpack_contents = list(/obj/item/flint = 1, /obj/item/rogueweapon/knife/villager = 1)
+ backpack_contents = list(/obj/item/flint = 1, /obj/item/rogueweapon/knife/villager = 1, /obj/item/rogueweapon/handsaw = 1. )
+
H.change_stat("strength", 1)
H.change_stat("intelligence", 1)
H.change_stat("constitution", 1)
diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/rare/Lmason.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/rare/Lmason.dm
index 09ae21b6de..73bb87bff2 100644
--- a/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/rare/Lmason.dm
+++ b/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/rare/Lmason.dm
@@ -44,6 +44,7 @@
beltl = /obj/item/rogueweapon/pick
backr = /obj/item/rogueweapon/axe/steel
backl = /obj/item/storage/backpack/rogue/backpack
+ backpack_contents = list(/obj/item/rogueweapon/chisel)
H.change_stat("strength", 1)
H.change_stat("intelligence", 2)
H.change_stat("endurance", 2)
diff --git a/code/modules/jobs/job_types/roguetown/serfs/mason.dm b/code/modules/jobs/job_types/roguetown/serfs/mason.dm
index f92cb40d36..e8bed33513 100644
--- a/code/modules/jobs/job_types/roguetown/serfs/mason.dm
+++ b/code/modules/jobs/job_types/roguetown/serfs/mason.dm
@@ -52,8 +52,9 @@
beltr = /obj/item/storage/belt/rogue/pouch/coins/mid
beltl = /obj/item/rogueweapon/hammer/claw
backl = /obj/item/storage/backpack/rogue/backpack
+ r_hand = /obj/item/rogueweapon/chisel
id = /obj/item/clothing/ring/silver/makers_guild
- backpack_contents = list(/obj/item/flint = 1, /obj/item/flashlight/flare/torch/lantern = 1, /obj/item/rogueweapon/knife/villager = 1)
+ backpack_contents = list(/obj/item/roguekey/mason = 1, /obj/item/flint = 1, /obj/item/flashlight/flare/torch/lantern = 1, /obj/item/rogueweapon/knife/villager = 1, /obj/item/keyring = 1, /obj/item/rogueweapon/handsaw=1)
H.change_stat("strength", 1)
H.change_stat("intelligence", 1)
diff --git a/code/modules/roguetown/roguecrafting/items.dm b/code/modules/roguetown/roguecrafting/items.dm
index 3396db4162..527a4fc620 100644
--- a/code/modules/roguetown/roguecrafting/items.dm
+++ b/code/modules/roguetown/roguecrafting/items.dm
@@ -256,6 +256,66 @@
/obj/item/natural/fibers = 2)
craftdiff = 1
+/datum/crafting_recipe/roguetown/plankaxe
+ name = "crude wooden plank"
+ result = list(/obj/item/natural/plank)
+ reqs = list(/obj/item/grown/log/tree/small = 1)
+ tools = list(/obj/item/rogueweapon/axe)
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+ verbage = "cut"
+ verbage_tp = "cuts"
+
+/datum/crafting_recipe/roguetown/plank
+ name = "wooden plank"
+ result = list(/obj/item/natural/plank,/obj/item/natural/plank)
+ reqs = list(/obj/item/grown/log/tree/small = 1)
+ tools = list(/obj/item/rogueweapon/handsaw)
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+ verbage = "saw"
+ verbage_tp = "saws"
+
+/datum/crafting_recipe/roguetown/plankshort
+ name = "short wooden plank"
+ result = list(/obj/item/natural/plankshort, /obj/item/natural/plankshort)
+ reqs = list(/obj/item/natural/plank = 1)
+ tools = list(/obj/item/rogueweapon/handsaw)
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+ verbage = "saw"
+ verbage_tp = "saws"
+
+/datum/crafting_recipe/roguetown/stoneblock
+ name = "stone block"
+ result = list(/obj/item/natural/stoneblock, /obj/item/natural/stoneblock)
+ reqs = list(/obj/item/natural/stone = 1)
+ tools = list(/obj/item/rogueweapon/chisel)
+ skillcraft = /datum/skill/craft/masonry
+ craftdiff = 1
+ verbage = "chisel"
+ verbage_tp = "chisels"
+
+/datum/crafting_recipe/roguetown/stoneblocprimitive
+ name = "crude stone block"
+ result = list(/obj/item/natural/stoneblock)
+ reqs = list(/obj/item/natural/stone = 1)
+ tools = list(/obj/item/natural/stone)
+ skillcraft = /datum/skill/craft/masonry
+ craftdiff = 1
+ verbage = "bash"
+ verbage_tp = "bashes"
+
+/datum/crafting_recipe/roguetown/stonesaw
+ name = "crude saw"
+ result = /obj/item/rogueweapon/handsaw/crude
+ reqs = list(/obj/item/natural/stone = 2, /obj/item/alch/bone = 1)
+ tools = /obj/item/rogueweapon/knife
+ craftdiff = 1
+ verbage = "hew"
+ verbage_tp = "hews"
+ craftdiff = 1
+
/*========= MISCELLANY ==========*/
/datum/crafting_recipe/roguetown/pestle
@@ -265,7 +325,6 @@
tools = list(/obj/item/rogueweapon/knife/hunting)
verbage = "crafts"
skillcraft = /datum/skill/craft/masonry
- craftdiff = 1
/datum/crafting_recipe/roguetown/mortar
name = "stone mortar"
diff --git a/code/modules/roguetown/roguecrafting/structure.dm b/code/modules/roguetown/roguecrafting/structure.dm
index 1fc924f387..916d3541bb 100644
--- a/code/modules/roguetown/roguecrafting/structure.dm
+++ b/code/modules/roguetown/roguecrafting/structure.dm
@@ -37,7 +37,7 @@
/datum/crafting_recipe/roguetown/structure/dye_bin_luxury
name = "luxury dye bin"
result = /obj/machinery/dye_bin
- reqs = list(/obj/item/grown/log/tree/small = 1,
+ reqs = list(/obj/item/natural/plank = 2,,
/obj/item/reagent_containers/food/snacks/produce/fyritius = 3,
/obj/item/reagent_containers/food/snacks/produce/pear = 3,
/obj/item/reagent_containers/food/snacks/produce/sunflower = 3,)
@@ -52,7 +52,7 @@
/datum/crafting_recipe/roguetown/structure/chair
name = "wooden chair"
result = /obj/item/chair/rogue/crafted
- reqs = list(/obj/item/grown/log/tree/small = 1)
+ reqs = list(/obj/item/natural/plank = 2)
verbage = "carpent"
verbage_tp = "carpents"
craftsound = 'sound/foley/Building-01.ogg'
@@ -82,7 +82,7 @@
/datum/crafting_recipe/roguetown/structure/table
name = "wooden table"
result = /obj/structure/table/wood/crafted
- reqs = list(/obj/item/grown/log/tree/small = 1)
+ reqs = list(/obj/item/natural/plank = 2)
verbage = "carpent"
verbage_tp = "carpents"
craftsound = 'sound/foley/Building-01.ogg'
@@ -130,7 +130,7 @@
/datum/crafting_recipe/roguetown/structure/closet
name = "closet"
result = /obj/structure/closet/crate/roguecloset/crafted
- reqs = list(/obj/item/grown/log/tree/small = 2)
+ reqs = list(/obj/item/natural/plank = 2)
verbage = "construct"
verbage_tp = "constructs"
craftsound = 'sound/foley/Building-01.ogg'
@@ -143,7 +143,7 @@
/datum/crafting_recipe/roguetown/structure/coffin
name = "wooden coffin"
result = /obj/structure/closet/crate/coffin
- reqs = list(/obj/item/grown/log/tree/small = 2)
+ reqs = list(/obj/item/natural/plank=3)
verbage = "construct"
verbage_tp = "constructs"
skillcraft = /datum/skill/craft/carpentry
@@ -231,7 +231,7 @@
/datum/crafting_recipe/roguetown/structure/barrel
name = "wooden barrel"
result = /obj/structure/fermenting_barrel/crafted
- reqs = list(/obj/item/grown/log/tree/small = 1)
+ reqs = list(/obj/item/natural/plank=2)
verbage = "construct"
verbage_tp = "makes"
craftsound = 'sound/foley/Building-01.ogg'
@@ -274,7 +274,7 @@
/datum/crafting_recipe/roguetown/structure/nicebed
name = "nice bed"
result = /obj/structure/bed/rogue
- reqs = list(/obj/item/grown/log/tree/small = 1,
+ reqs = list(/obj/item/natural/plank=2,
/obj/item/natural/cloth = 1)
tools = list(/obj/item/needle)
verbage = "carpent"
@@ -286,7 +286,7 @@
/datum/crafting_recipe/roguetown/structure/door
name = "wooden door"
result = /obj/structure/mineral_door/wood/deadbolt
- reqs = list(/obj/item/grown/log/tree/small = 2)
+ reqs = list(/obj/item/natural/plank=2)
verbage = "carpent"
verbage_tp = "carpents"
craftsound = 'sound/foley/Building-01.ogg'
@@ -332,7 +332,7 @@
/datum/crafting_recipe/roguetown/structure/window
name = "solid window"
result = /obj/structure/roguewindow/solid
- reqs = list(/obj/item/grown/log/tree/small = 1,
+ reqs = list(/obj/item/natural/plank = 1,
/obj/item/natural/glass = 1)
craftsound = 'sound/foley/Building-01.ogg'
skillcraft = /datum/skill/craft/masonry
@@ -341,7 +341,7 @@
/datum/crafting_recipe/roguetown/structure/windowopen
name = "openable window"
result = /obj/structure/roguewindow/openclose
- reqs = list(/obj/item/grown/log/tree/small = 1,
+ reqs = list(/obj/item/natural/plank = 1,
/obj/item/natural/glass = 1,
/obj/item/ingot/iron = 1)
craftsound = 'sound/foley/Building-01.ogg'
@@ -351,7 +351,7 @@
/datum/crafting_recipe/roguetown/structure/windowstained
name = "stained glass window (silver)"
result = /obj/structure/roguewindow/stained
- reqs = list(/obj/item/natural/stone = 3,
+ reqs = list(/obj/item/natural/stoneblock = 3,
/obj/item/natural/glass = 2,
/obj/item/ingot/silver = 1)
skillcraft = /datum/skill/craft/masonry
@@ -487,7 +487,7 @@
/datum/crafting_recipe/roguetown/structure/forge
name = "forge"
result = /obj/machinery/light/rogue/forge
- reqs = list(/obj/item/natural/stone = 4,
+ reqs = list(/obj/item/natural/stoneblock = 4,
/obj/item/rogueore/coal = 1)
verbage = "build"
diff --git a/code/modules/roguetown/roguecrafting/turfs.dm b/code/modules/roguetown/roguecrafting/turfs.dm
index 9916298dde..f29a6db51f 100644
--- a/code/modules/roguetown/roguecrafting/turfs.dm
+++ b/code/modules/roguetown/roguecrafting/turfs.dm
@@ -4,7 +4,7 @@
/*========= CARPENTRY SKILL ==========*/
/datum/crafting_recipe/roguetown/turfs/woodfloor
- name = "wooden floor"
+ name = "rough wooden floor"
result = /turf/open/floor/rogue/ruinedwood
reqs = list(/obj/item/grown/log/tree/small = 1)
skillcraft = /datum/skill/craft/carpentry
@@ -31,7 +31,7 @@
/datum/crafting_recipe/roguetown/turfs/woodwall
name = "wooden wall"
result = /turf/closed/wall/mineral/rogue/wood
- reqs = list(/obj/item/grown/log/tree/small = 2)
+ reqs = list(/obj/item/natural/plank = 2)
skillcraft = /datum/skill/craft/carpentry
craftdiff = 1
@@ -45,7 +45,7 @@
/datum/crafting_recipe/roguetown/turfs/woodwindow
name = "wooden murder hole"
result = /turf/closed/wall/mineral/rogue/wood/window
- reqs = list(/obj/item/grown/log/tree/small = 2)
+ reqs = list(/obj/item/natural/plank = 2)
skillcraft = /datum/skill/craft/carpentry
craftdiff = 1
@@ -56,11 +56,42 @@
return
return TRUE
+/datum/crafting_recipe/roguetown/turfs/woodfloorplank
+ name = "wooden floor"
+ result = /turf/open/floor/rogue/ruinedwood/spiral
+ reqs = list(/obj/item/natural/plank = 1)
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/turfs/woodfloorplank/TurfCheck(mob/user, turf/T)
+ if(isclosedturf(T))
+ return
+ if(!istype(T, /turf/open/floor/rogue/dirt))
+ if(!istype(T, /turf/open/transparent/openspace))
+ if(!istype(T, /turf/open/floor/rogue/grass))
+ return
+ return TRUE
+
+/datum/crafting_recipe/roguetown/turfs/woodfloorchevron
+ name = "patterned wooden floor"
+ result = /turf/open/floor/rogue/ruinedwood/spiral
+ reqs = list(/obj/item/natural/plankshort = 2)
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/turfs/woodfloorchevron/TurfCheck(mob/user, turf/T)
+ if(isclosedturf(T))
+ return
+ if(!istype(T, /turf/open/floor/rogue/dirt))
+ if(!istype(T, /turf/open/transparent/openspace))
+ if(!istype(T, /turf/open/floor/rogue/grass))
+ return
+ return TRUE
/*========= MASONRY SKILL ==========*/
/datum/crafting_recipe/roguetown/turfs/stonefloor
- name = "stone floor"
- result = /turf/open/floor/rogue/blocks
+ name = "rough stone floor"
+ result = /turf/open/floor/rogue/cobble
reqs = list(/obj/item/natural/stone = 1)
skillcraft = /datum/skill/craft/masonry
craftdiff = 0
@@ -74,6 +105,38 @@
return
return TRUE
+/datum/crafting_recipe/roguetown/turfs/stoneblockfloor
+ name = "block floor"
+ result = /turf/open/floor/rogue/blocks
+ reqs = list(/obj/item/natural/stoneblock = 1)
+ skillcraft = /datum/skill/craft/masonry
+ craftdiff = 1
+
+/datum/crafting_recipe/roguetown/turfs/stoneblockfloor/TurfCheck(mob/user, turf/T)
+ if(isclosedturf(T))
+ return
+ if(!istype(T, /turf/open/floor/rogue/dirt))
+ if(!istype(T, /turf/open/transparent/openspace))
+ if(!istype(T, /turf/open/floor/rogue/grass))
+ return
+ return TRUE
+
+/datum/crafting_recipe/roguetown/turfs/stoneherring
+ name = "herringstone floor"
+ result = /turf/open/floor/rogue/herringbone
+ reqs = list(/obj/item/natural/stoneblock = 1)
+ skillcraft = /datum/skill/craft/masonry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/turfs/stoneherring/TurfCheck(mob/user, turf/T)
+ if(isclosedturf(T))
+ return
+ if(!istype(T, /turf/open/floor/rogue/dirt))
+ if(!istype(T, /turf/open/transparent/openspace))
+ if(!istype(T, /turf/open/floor/rogue/grass))
+ return
+ return TRUE
+
/datum/crafting_recipe/roguetown/turfs/stonewall
name = "stone wall"
result = /turf/closed/wall/mineral/rogue/stone
@@ -91,7 +154,7 @@
/datum/crafting_recipe/roguetown/turfs/stonewindow
name = "stone murder hole"
result = /turf/closed/wall/mineral/rogue/stone/window
- reqs = list(/obj/item/natural/stone = 2)
+ reqs = list(/obj/item/natural/stoneblock = 2)
skillcraft = /datum/skill/craft/masonry
craftdiff = 1
@@ -102,6 +165,34 @@
return
return TRUE
+//fancier walls
+/datum/crafting_recipe/roguetown/turfs/stonewallcraft
+ name = "fancy stone block wall"
+ result = /turf/closed/wall/mineral/rogue/craftstone
+ reqs = list(/obj/item/natural/stoneblock = 3)
+ skillcraft = /datum/skill/craft/masonry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/turfs/stonewallcraft/TurfCheck(mob/user, turf/T)
+ if(isclosedturf(T))
+ return
+ if(!istype(T, /turf/open/floor/rogue))
+ return
+ return TRUE
+
+/datum/crafting_recipe/roguetown/turfs/stonewallbrick
+ name = "stone brick wall"
+ result = /turf/closed/wall/mineral/rogue/stonebrick
+ reqs = list(/obj/item/natural/stoneblock = 3)
+ skillcraft = /datum/skill/craft/masonry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/turfs/stonewallbrick/TurfCheck(mob/user, turf/T)
+ if(isclosedturf(T))
+ return
+ if(!istype(T, /turf/open/floor/rogue))
+ return
+ return TRUE
/*========= CRAFTING SKILL ==========*/
/datum/crafting_recipe/roguetown/turfs/twig
diff --git a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm
index ad157e5845..cdaf468b1c 100644
--- a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm
+++ b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm
@@ -199,6 +199,24 @@
created_item = /obj/item/rogueweapon/tongs
i_type = "Tools"
+/datum/anvil_recipe/tools/handsaw
+ name = "handsaw (+s)"
+ recipe_name = "a handsaw"
+ req_bar = /obj/item/ingot/iron
+ additional_items = list(/obj/item/grown/log/tree/stick)
+ created_item = /obj/item/rogueweapon/handsaw
+ i_type = "Tools"
+
+/datum/anvil_recipe/tools/chisel
+ name = "chisel (+s) x2"
+ recipe_name = " chisel"
+ req_bar = /obj/item/ingot/iron
+ additional_items = list(/obj/item/grown/log/tree/stick)
+ created_item = /obj/item/rogueweapon/chisel
+ createmultiple = TRUE
+ createditem_num = 2
+ i_type = "Tools"
+
/datum/anvil_recipe/tools/torch
name = "Torches x5 (+c)"
recipe_name = "five Torches"
diff --git a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm
index 4bb44756cc..112d6aa696 100644
--- a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm
+++ b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm
@@ -273,7 +273,7 @@
recipe_name = "a Tower Shield"
appro_skill = /datum/skill/craft/armorsmithing
req_bar = /obj/item/ingot/iron
- additional_items = list(/obj/item/grown/log/tree/small)
+ additional_items = list(/obj/item/natural/plankshort, /obj/item/natural/plankshort)
created_item = /obj/item/rogueweapon/shield/tower
craftdiff = 2
@@ -354,7 +354,7 @@
recipe_name = "a Crossbow"
appro_skill = /datum/skill/craft/engineering
req_bar = /obj/item/ingot/steel
- additional_items = list(/obj/item/grown/log/tree/small, /obj/item/natural/fibers)
+ additional_items = list(/obj/item/natural/plank, /obj/item/natural/fibers)
created_item = /obj/item/gun/ballistic/revolver/grenadelauncher/crossbow
craftdiff = 1 // Minimal engineering needed
diff --git a/code/modules/roguetown/roguejobs/craftsman/tools.dm b/code/modules/roguetown/roguejobs/craftsman/tools.dm
new file mode 100644
index 0000000000..f41477b4a6
--- /dev/null
+++ b/code/modules/roguetown/roguejobs/craftsman/tools.dm
@@ -0,0 +1,232 @@
+/obj/item/rogueweapon/handsaw
+ force = 5
+ possible_item_intents = list(/datum/intent/mace/strike/shovel)
+ gripped_intents = null
+ name = "handsaw"
+ desc = "An iron saw for sawing wood."
+ icon_state = "handsaw"
+ icon = 'icons/roguetown/items/crafting.dmi'
+ sharpness = IS_SHARP
+ dropshrink = 0.9
+ wdefense = 1
+// pixel_y = -16
+// pixel_x = -16
+// inhand_x_dimension = 64
+// inhand_y_dimension = 64
+// bigboy = TRUE
+ wlength = WLENGTH_LONG
+ w_class = WEIGHT_CLASS_NORMAL
+ slot_flags = ITEM_SLOT_BACK || ITEM_SLOT_HIP
+ swingsound = list('sound/combat/wooshes/blunt/shovel_swing.ogg','sound/combat/wooshes/blunt/shovel_swing2.ogg')
+ drop_sound = 'sound/foley/dropsound/shovel_drop.ogg'
+ smeltresult = /obj/item/ingot/iron
+ associated_skill = /datum/skill/combat/polearms
+ max_blade_int = 50
+
+/obj/item/rogueweapon/handsaw/crude
+ name = "crude sawing tool"
+ desc = "A serrated piece of flint with a bone handle."
+ icon_state = "stonesaw"
+ wlength = WLENGTH_LONG
+ w_class = WEIGHT_CLASS_BULKY
+ force = 5
+ smeltresult = /obj/item/ash
+ firefuel = 5 MINUTES
+ toolspeed = 3
+
+/obj/item/rogueweapon/chisel
+ name = "chisel"
+ desc = ""
+ icon_state = "chisel"
+ icon = 'icons/roguetown/items/crafting.dmi'
+ force = 2
+ throwforce = 2
+ possible_item_intents = list(/datum/intent/stab, /datum/intent/pick)
+ gripped_intents = null
+ twohands_required = FALSE
+ sharpness = IS_SHARP
+ dropshrink = 0.9
+ w_class = WEIGHT_CLASS_SMALL
+ wdefense = 1
+ blade_dulling = 0
+ max_integrity = 150
+ slot_flags = ITEM_SLOT_MOUTH|ITEM_SLOT_HIP
+// pixel_y = -16
+// pixel_x = -16
+// inhand_x_dimension = 64
+// inhand_y_dimension = 64
+// bigboy = TRUE
+ swingsound = list('sound/combat/wooshes/blunt/shovel_swing.ogg','sound/combat/wooshes/blunt/shovel_swing2.ogg')
+ drop_sound = 'sound/foley/dropsound/shovel_drop.ogg'
+ associated_skill = /datum/skill/combat/knives
+ max_blade_int = 50
+
+/obj/item/natural/plank
+ name = "wooden plank"
+ desc = "A smooth wooden plank."
+ icon = 'icons/roguetown/items/crafting.dmi'
+ icon_state = "woodplank"
+ possible_item_intents = list(/datum/intent/use)
+ force = 10
+ throwforce = 10
+ attacked_sound = 'sound/misc/woodhit.ogg'
+ obj_flags = null
+ firefuel = 20 MINUTES
+ resistance_flags = FLAMMABLE
+ slot_flags = null
+ body_parts_covered = null
+ experimental_onhip = TRUE
+ max_integrity = 20
+ muteinmouth = TRUE
+ w_class = WEIGHT_CLASS_BULKY
+ bundletype = /obj/item/natural/bundle/plank
+
+/obj/item/natural/plank/attack_right(mob/user)
+ to_chat(user, "I start to collect [src]...")
+ if(move_after(user, 5 SECONDS, target = src))
+ var/plankcount = 0
+ for(var/obj/item/natural/plank/F in get_turf(src))
+ plankcount++
+ while(plankcount > 0)
+ if(plankcount == 1)
+ new /obj/item/natural/plank(get_turf(user))
+ plankcount--
+ else if(plankcount >= 2)
+ var/obj/item/natural/bundle/plank/B = new(get_turf(user))
+ B.amount = clamp(plankcount, 2, 3)
+ B.update_bundle()
+ plankcount -= clamp(plankcount, 2, 3)
+ for(var/obj/item/natural/plank/F in get_turf(src))
+ qdel(F)
+
+/obj/item/natural/plankshort
+ name = "short wooden plank"
+ desc = "A smooth wooden plank that has been cut short."
+ force = 8
+ throwforce = 8
+ icon_state = "shortplank"
+ icon = 'icons/roguetown/items/crafting.dmi'
+ firefuel = 10 MINUTES
+ resistance_flags = FLAMMABLE
+ slot_flags = null
+ body_parts_covered = null
+ experimental_onhip = TRUE
+ max_integrity = 15
+ muteinmouth = TRUE
+ w_class = WEIGHT_CLASS_NORMAL
+ bundletype = /obj/item/natural/bundle/plankshort
+
+/obj/item/natural/plankshort/attack_right(mob/user)
+ to_chat(user, "I start to collect [src]...")
+ if(move_after(user, 5 SECONDS, target = src))
+ var/splankcount = 0
+ for(var/obj/item/natural/plank/F in get_turf(src))
+ splankcount++
+ while(splankcount > 0)
+ if(splankcount == 1)
+ new /obj/item/natural/plankshort(get_turf(user))
+ splankcount--
+ else if(splankcount >= 2)
+ var/obj/item/natural/bundle/plankshort/B = new(get_turf(user))
+ B.amount = clamp(splankcount, 2, 3)
+ B.update_bundle()
+ splankcount -= clamp(splankcount, 2, 3)
+ for(var/obj/item/natural/plankshort/F in get_turf(src))
+ qdel(F)
+
+
+/obj/item/natural/stoneblock
+ name = "stone block"
+ desc = "A rectangular stone block for building."
+ icon = 'icons/roguetown/items/crafting.dmi'
+ icon_state = "stoneblock"
+ gripped_intents = null
+ dropshrink = 0.75
+ possible_item_intents = list(INTENT_GENERIC)
+ force = 12
+ throwforce = 20 //brick is valid weapon
+ slot_flags = null
+ obj_flags = null
+ w_class = WEIGHT_CLASS_SMALL
+ bundletype = /obj/item/natural/bundle/stoneblock
+
+/obj/item/natural/stoneblock/attack_right(mob/user)
+ to_chat(user, "I start to collect [src]...")
+ if(move_after(user, 5 SECONDS, target = src))
+ var/blockcount = 0
+ for(var/obj/item/natural/stoneblock/F in get_turf(src))
+ blockcount++
+ while(blockcount > 0)
+ if(blockcount == 1)
+ new /obj/item/natural/stoneblock(get_turf(user))
+ blockcount--
+ else if(blockcount >= 2)
+ var/obj/item/natural/bundle/stoneblock/B = new(get_turf(user))
+ B.amount = clamp(blockcount, 2, 3)
+ B.update_bundle()
+ blockcount -= clamp(blockcount, 2, 3)
+ for(var/obj/item/natural/stoneblock/F in get_turf(src))
+ qdel(F)
+
+/obj/item/natural/bundle/plank
+ name = "stack of wooden planks"
+ desc = "A stack of wooden planks."
+ icon_state = "woodplankbundle1"
+ icon = 'icons/roguetown/items/crafting.dmi'
+ possible_item_intents = list(/datum/intent/use)
+ force = 15
+ throwforce = 18
+ throw_range = 2
+ firefuel = null
+ resistance_flags = null
+ firemod = null
+ w_class = WEIGHT_CLASS_HUGE
+ stackname = "plank"
+ stacktype = /obj/item/natural/plank
+ maxamount = 3
+ icon1 = "woodplankbundle1"
+ icon1step = 2
+ icon2 = "woodplankbundle2"
+ icon2step = 3
+
+/obj/item/natural/bundle/plankshort
+ name = "stack of short wooden planks"
+ desc = "A stack of short wooden planks."
+ icon_state = "shortplankbundle1"
+ icon = 'icons/roguetown/items/crafting.dmi'
+ possible_item_intents = list(/datum/intent/use)
+ force = 15
+ throwforce = 18
+ throw_range = 2
+ firefuel = null
+ resistance_flags = null
+ firemod = null
+ w_class = WEIGHT_CLASS_HUGE
+ stackname = "planks"
+ stacktype = /obj/item/natural/plankshort
+ maxamount = 3
+ icon1 = "shortplankbundle1"
+ icon1step = 2
+ icon2 = "shortplankbundle2"
+ icon2step = 3
+
+/obj/item/natural/bundle/stoneblock
+ name = "stack of stone blocks"
+ desc = "A stack of stone blocks."
+ icon_state = "stoneblockbundle1"
+ icon = 'icons/roguetown/items/crafting.dmi'
+ possible_item_intents = list(/datum/intent/use)
+ force = 15
+ throwforce = 18
+ throw_range = 2
+ firefuel = null
+ resistance_flags = null
+ firemod = null
+ w_class = WEIGHT_CLASS_HUGE
+ stackname = "stone blocks"
+ stacktype = /obj/item/natural/stoneblock
+ maxamount = 3
+ icon1 = "stoneblockbundle1"
+ icon1step = 2
+ icon2 = "stoneblockbundle2"
+ icon2step = 3
diff --git a/icons/roguetown/items/crafting.dmi b/icons/roguetown/items/crafting.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..1fb342ebdb3dc5cdd0326e59e2e47188b72ca4f4
GIT binary patch
literal 3793
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
o?8wA_-Ze`GBvX9;