diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index 736cc0dfa45..707cabff31b 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -321,7 +321,12 @@
if(ispath(R.result, /turf))
var/turf/X = T.PlaceOnTop(R.result)
if(X)
- X.OnCrafted(user.dir, user)
+ // Caustic Edit - Allows 'diagonal' turfs. Used for roof corners atm
+ if(R.diagonal)
+ X.OnCrafted(X.SelectDiagDirection(), user)
+ else
+ X.OnCrafted(user.dir, user)
+ // Caustic Edit end
X.add_fingerprint(user)
if(R.loud)
X.loud_message("Construction sounds can be heard")
diff --git a/code/game/objects/items/rogueitems/natural/dirtclod.dm b/code/game/objects/items/rogueitems/natural/dirtclod.dm
index 4094a205cfb..5e8ae769469 100644
--- a/code/game/objects/items/rogueitems/natural/dirtclod.dm
+++ b/code/game/objects/items/rogueitems/natural/dirtclod.dm
@@ -139,3 +139,19 @@
dirtamt = min(dirtamt + 1, 5)
return
..()
+
+// Caustic Edit Start - Allows RMBing dirt piles to take dirt out
+/obj/structure/fluff/clodpile/attack_right(mob/user)
+ if(isliving(user))
+ var/mob/living/L = user
+ if(L.stat != CONSCIOUS)
+ return
+ var/obj/item/I = new /obj/item/natural/dirtclod(src)
+ if(L.put_in_active_hand(I))
+ L.visible_message(span_warning("[L] picks up some dirt from the [name]."))
+ dirtamt--
+ if(dirtamt <= 0)
+ qdel(src)
+ return
+ .=..()
+// Caustic Edit End
diff --git a/code/game/objects/lighting/rogue_fires.dm b/code/game/objects/lighting/rogue_fires.dm
index a34523ca25f..5b8a4b58b2d 100644
--- a/code/game/objects/lighting/rogue_fires.dm
+++ b/code/game/objects/lighting/rogue_fires.dm
@@ -152,6 +152,22 @@
return TRUE
return ..()
+// Caustic Edit
+/obj/machinery/light/rogue/campfire/fireplace/OnCrafted(dirin)
+ pixel_x = 0
+ pixel_y = 0
+ switch(dirin)
+ if(NORTH)
+ pixel_y = 32
+ if(SOUTH)
+ pixel_y = -32
+ if(EAST)
+ pixel_x = 32
+ if(WEST)
+ pixel_x = -32
+ . = ..()
+// Caustic Edit End
+
/obj/machinery/light/rogue/candle
name = "candles"
desc = "Tiny flames flicker to the slightest breeze and offer enough light to see."
@@ -163,6 +179,8 @@
pixel_y = 32
soundloop = null
+ var/move_on_craft = TRUE // Caustic Edit
+
/obj/machinery/light/rogue/candle/off
name = "candles"
desc = "Cold wax sticks in sad half-melted repose. All they need is a spark."
@@ -184,15 +202,16 @@
/obj/machinery/light/rogue/candle/OnCrafted(dirin)
pixel_x = 0
pixel_y = 0
- switch(dirin)
- if(NORTH)
- pixel_y = 32
- if(SOUTH)
- pixel_y = -32
- if(EAST)
- pixel_x = 32
- if(WEST)
- pixel_x = -32
+ if(move_on_craft) // Caustic Edit. Allows floor candles to not shift 1 tile forwards on crafting
+ switch(dirin)
+ if(NORTH)
+ pixel_y = 32
+ if(SOUTH)
+ pixel_y = -32
+ if(EAST)
+ pixel_x = 32
+ if(WEST)
+ pixel_x = -32
. = ..()
/obj/machinery/light/rogue/candle/attack_hand(mob/user)
@@ -242,6 +261,8 @@
layer = TABLE_LAYER
cookonme = FALSE
+ move_on_craft = FALSE // Caustic Edit
+
/obj/machinery/light/rogue/candle/floorcandle/alt
icon_state = "floorcandlee1"
base_state = "floorcandlee"
@@ -270,6 +291,8 @@
plane = GAME_PLANE_UPPER
cookonme = FALSE
+ var/move_on_craft = TRUE // Caustic Edit
+
//CC Edit: Optimizing torches to only be in SSobj when off a torch holder
/obj/machinery/light/rogue/torchholder/Entered(atom/movable/arrived, atom/old_loc)
. = ..()
@@ -317,6 +340,13 @@
/obj/machinery/light/rogue/torchholder/OnCrafted(dirin, user)
dirin = turn(dirin, 180)
+ // Caustic Edit / Actually offsets crafted sconces
+ if(move_on_craft)
+ switch(dirin)
+ if(SOUTH)
+ pixel_y = 32
+ // Caustic Edit end
+ . = ..()
QDEL_NULL(torchy)
on = FALSE
set_light(0)
diff --git a/code/game/objects/structures/deer_trophy.dm b/code/game/objects/structures/deer_trophy.dm
index ca375486fc1..286638094e8 100644
--- a/code/game/objects/structures/deer_trophy.dm
+++ b/code/game/objects/structures/deer_trophy.dm
@@ -5,3 +5,19 @@
icon_state = "deer_trophy"
dir = SOUTH
pixel_y = 32
+
+// Caustic Edit
+/obj/structure/rogue/trophy/deer/OnCrafted(dirin)
+ pixel_x = 0
+ pixel_y = 0
+ switch(dirin)
+ if(NORTH)
+ pixel_y = 32
+ if(SOUTH)
+ pixel_y = -32
+ if(EAST)
+ pixel_x = 32
+ if(WEST)
+ pixel_x = -32
+ . = ..()
+// Caustic Edit End
diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm
index d6b97bac233..aff390c629e 100644
--- a/code/game/objects/structures/fluff.dm
+++ b/code/game/objects/structures/fluff.dm
@@ -282,6 +282,13 @@
icon_state = "border"
pass_crawl = FALSE
+// Caustic edit - These were mapped in as var-edited decals before
+/obj/structure/fluff/railing/plat_edge
+ name = "platform edge"
+ icon = 'icons/turf/roguefloor.dmi'
+ icon_state = "borderfall"
+// Caustic Edit end
+
/obj/structure/fluff/railing/fence
name = "palisade"
desc = "A rudimentary barrier that might keep the monsters at bay."
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 125a1a0d409..671720ace7e 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -646,12 +646,33 @@
climb_offset = 0
pixel_y = 32
+ var/move_on_craft = TRUE // Caustic Edit
+
+// Caustic Edit
+/obj/structure/rack/rogue/shelf/OnCrafted(dirin)
+ if(move_on_craft)
+ pixel_x = 0
+ pixel_y = 0
+ switch(dirin)
+ if(NORTH)
+ pixel_y = 32
+ if(SOUTH)
+ pixel_y = -32
+ if(EAST)
+ pixel_x = 32
+ if(WEST)
+ pixel_x = -32
+ . = ..()
+// Caustic Edit end
+
/obj/structure/rack/rogue/shelf/big
icon = 'icons/roguetown/misc/structure.dmi'
icon_state = "shelf_big"
dir = SOUTH
pixel_y = 16
+ move_on_craft = FALSE // Caustic Edit
+
/obj/structure/rack/rogue/shelf/biggest
icon_state = "shelf_biggest"
pixel_y = 0
@@ -659,6 +680,8 @@
density = TRUE
climb_offset = 10
+ move_on_craft = FALSE // Caustic Edit
+
/obj/structure/rack/rogue/shelf/notdense // makes the wall mounted one less weird in a way, got downside of offset when loaded again tho
density = FALSE
pixel_y = 24
diff --git a/code/game/turfs/open/floor/roguefloor.dm b/code/game/turfs/open/floor/roguefloor.dm
index 1b4fbfccfb8..9c26461e0bf 100644
--- a/code/game/turfs/open/floor/roguefloor.dm
+++ b/code/game/turfs/open/floor/roguefloor.dm
@@ -174,12 +174,60 @@
/turf/open/floor/rogue/rooftop/green/west
dir = 8
+// Caustic Edit start
+// Proper roofg directionals
+
+/turf/open/floor/rogue/rooftop/green/northeast
+ dir = 5
+
+/turf/open/floor/rogue/rooftop/green/northwest
+ dir = 9
+
+/turf/open/floor/rogue/rooftop/green/southeast
+ dir = 6
+
+/turf/open/floor/rogue/rooftop/green/southwest
+ dir = 10
+
+/turf/open/floor/rogue/rooftop/green/alt
+ icon_state = "roofgalt-arw"
+
+/turf/open/floor/rogue/rooftop/green/alt/Initialize()
+ . = ..()
+ icon_state = "roofgalt"
+
+/turf/open/floor/rogue/rooftop/green/alt/north
+ dir = 1
+
+/turf/open/floor/rogue/rooftop/green/alt/east
+ dir = 4
+
+/turf/open/floor/rogue/rooftop/green/alt/west
+ dir = 8
+
+/turf/open/floor/rogue/rooftop/green/alt/northeast
+ dir = 5
+
+/turf/open/floor/rogue/rooftop/green/alt/northwest
+ dir = 9
+
+/turf/open/floor/rogue/rooftop/green/alt/southeast
+ dir = 6
+
+/turf/open/floor/rogue/rooftop/green/alt/southwest
+ dir = 10
+
+// Old directionals to not break mapping
+//TODO: Mapping, change out all the corner turf subtypes for the directional ones above.
+
/turf/open/floor/rogue/rooftop/green/corner1
- icon_state = "roofgc1-arw"
+ // icon_state = "roofgc1-arw" // Caustic Edit
+/*
/turf/open/floor/rogue/rooftop/green/corner1/Initialize()
. = ..()
icon_state = "roofgc1"
+*/
/turf/open/floor/rogue/rooftop/green/corner1/dirone
dir = 1
@@ -205,6 +253,7 @@
/turf/open/floor/rogue/rooftop/green/corner1/dirten
dir = 10
+// Caustic Edit end - old directionals end
/turf/open/floor/rogue/AzureSand
name = "sand"
diff --git a/code/modules/hotspring/hotspring.dm b/code/modules/hotspring/hotspring.dm
index 8215bc7fbdf..861cda3171a 100644
--- a/code/modules/hotspring/hotspring.dm
+++ b/code/modules/hotspring/hotspring.dm
@@ -201,6 +201,8 @@
torch_off_state = "stonelantern"
base_state = "stonelantern"
+ move_on_craft = FALSE // Caustic Edit
+
/obj/machinery/light/rogue/torchholder/hotspring/standing
name = "standing stone lantern"
icon_state = "stonelantern_standing1"
diff --git a/code/modules/roguetown/roguecrafting/items.dm b/code/modules/roguetown/roguecrafting/items.dm
index d2d104c7cc7..a19668b46ab 100644
--- a/code/modules/roguetown/roguecrafting/items.dm
+++ b/code/modules/roguetown/roguecrafting/items.dm
@@ -357,6 +357,7 @@
/obj/item/natural/fur = 1
)
craftdiff = 1
+ subtype_reqs = TRUE // Caustic Edit. Allows using any furs
/datum/crafting_recipe/roguetown/survival/whetstone
name = "whetstone"
diff --git a/code/modules/roguetown/roguecrafting/sewing.dm b/code/modules/roguetown/roguecrafting/sewing.dm
index 9c79f0d3b3d..dca2cf04c28 100644
--- a/code/modules/roguetown/roguecrafting/sewing.dm
+++ b/code/modules/roguetown/roguecrafting/sewing.dm
@@ -141,18 +141,6 @@
craftdiff = 4
bypass_dupe_test = TRUE
-/datum/crafting_recipe/roguetown/sewing/nurseveil
- name = "nurse's veil, improvised"
- category = "Hats"
- result = list(/obj/item/clothing/head/roguetown/veiled)
- tools = list(/obj/item/rogueweapon/huntingknife)
- reqs = list(
- /obj/item/tablecloth/silk = 1
- )
- craftdiff = 1
- sellprice = 5
- bypass_dupe_test = TRUE // Uses the tablecloth, a much rarer and valuable article, in lieu of cloth.
-
/* craftdif of 1 */
/datum/crafting_recipe/roguetown/sewing/clothgloves
@@ -950,7 +938,7 @@
craftdiff = 2
sellprice = 5
-/datum/crafting_recipe/roguetown/sewing/nurseveil
+/datum/crafting_recipe/roguetown/sewing/nurseveil_improv // Caustic Edit
name = "nurse's veil, improvised"
category = "Hats"
result = list(/obj/item/clothing/head/roguetown/veiled)
diff --git a/code/modules/roguetown/roguecrafting/structure.dm b/code/modules/roguetown/roguecrafting/structure.dm
index 28b6d068781..d241a2019ff 100644
--- a/code/modules/roguetown/roguecrafting/structure.dm
+++ b/code/modules/roguetown/roguecrafting/structure.dm
@@ -1033,7 +1033,7 @@
wallcraft = TRUE
/datum/crafting_recipe/roguetown/structure/fireplace
- name = "Fireplace (North)"
+ name = "Fireplace"
category = "Misc"
result = /obj/machinery/light/rogue/campfire/fireplace
reqs = list(/obj/item/grown/log/tree/small = 1,
@@ -1235,12 +1235,18 @@
name = "large table"
category = "Tables"
result = /obj/structure/table/wood/large_table
- reqs = list(/obj/item/natural/wood/plank = 2)
+ reqs = list(/obj/item/natural/wood/plank = 1)
verbage_simple = "construct"
verbage = "constructs"
skillcraft = /datum/skill/craft/carpentry
craftdiff = 3
+// Caustic Edit
+/datum/crafting_recipe/roguetown/structure/largetable/corner
+ name = "large table (corner)"
+ diagonal = TRUE
+// Caustic Edit end
+
/datum/crafting_recipe/roguetown/structure/operatingtable
name = "operating table"
category = "Beds"
@@ -1577,4 +1583,214 @@
verbage = "grinds"
craftsound = null
+/datum/crafting_recipe/roguetown/structure/furrug
+ name = "giant fur rug"
+ category = "Floors"
+ result = /obj/structure/giantfur
+ reqs = list(/obj/item/natural/fur = 3)
+ craftdiff = 0
+ subtype_reqs = FALSE // Allows using any furs
+
+/datum/crafting_recipe/roguetown/structure/furrugsmall
+ name = "giant fur pelt"
+ category = "Floors"
+ result = /obj/structure/giantfur/small
+ reqs = list(/obj/item/natural/fur = 2)
+ craftdiff = 0
+ subtype_reqs = FALSE // Allows using any furs
+
+/datum/crafting_recipe/roguetown/structure/floorcandle
+ name = "floor candles"
+ category = "Lighting"
+ result = /obj/machinery/light/rogue/candle/floorcandle
+ reqs = list(/obj/item/candle/yellow = 1)
+ verbage_simple = "lay out"
+ verbage = "lays out"
+ craftdiff = 0
+ ignoredensity = TRUE
+
+/datum/crafting_recipe/roguetown/structure/floorcandlealt
+ name = "floor candles (alt)"
+ category = "Lighting"
+ result = /obj/machinery/light/rogue/candle/floorcandle/alt
+ reqs = list(/obj/item/candle/yellow = 1)
+ verbage_simple = "lay out"
+ verbage = "lays out"
+ craftdiff = 0
+ ignoredensity = TRUE
+
+/datum/crafting_recipe/roguetown/structure/floorcandlepink
+ name = "floor candles (Eoran)"
+ category = "Lighting"
+ result = /obj/machinery/light/rogue/candle/floorcandle/pink
+ reqs = list(/obj/item/candle/eora = 1)
+ verbage_simple = "lay out"
+ verbage = "lays out"
+ craftdiff = 0
+ ignoredensity = TRUE
+
+/datum/crafting_recipe/roguetown/structure/floorcandlepinkalt
+ name = "floor candles (Eoran) (alt)"
+ category = "Lighting"
+ result = /obj/machinery/light/rogue/candle/floorcandle/alt/pink
+ reqs = list(/obj/item/candle/eora = 1)
+ verbage_simple = "lay out"
+ verbage = "lays out"
+ craftdiff = 0
+ ignoredensity = TRUE
+
+/datum/crafting_recipe/roguetown/structure/closetdark
+ name = "closet (dark)"
+ category = "Containers"
+ result = /obj/structure/closet/crate/roguecloset/dark
+ reqs = list(/obj/item/natural/wood/plank = 2)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+
+/datum/crafting_recipe/roguetown/structure/closetdark
+ name = "toilet"
+ result = /obj/structure/toilet
+ reqs = list(/obj/item/natural/wood/plank = 2)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+
+/datum/crafting_recipe/roguetown/structure/shelf
+ name = "shelf (wall)"
+ result = /obj/structure/rack/rogue/shelf
+ reqs = list(/obj/item/natural/wood/plank = 2)
+ verbage_simple = "build"
+ verbage = "builds"
+ skillcraft = /datum/skill/craft/carpentry
+ wallcraft = TRUE
+ craftdiff = 1
+ ignoredensity = TRUE // So you can put them over tables
+
+/datum/crafting_recipe/roguetown/structure/shelf_big
+ name = "shelf (standing small)"
+ result = /obj/structure/rack/rogue/shelf/big
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ verbage_simple = "build"
+ verbage = "builds"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+ ignoredensity = TRUE // So you can put them over tables
+
+/datum/crafting_recipe/roguetown/structure/shelf_biggest
+ name = "shelf (standing)"
+ result = /obj/structure/rack/rogue/shelf/biggest
+ reqs = list(/obj/item/natural/wood/plank = 2)
+ verbage_simple = "build"
+ verbage = "builds"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+
+/datum/crafting_recipe/roguetown/structure/drawer
+ name = "drawer"
+ result = /obj/structure/closet/crate/drawer
+ reqs = list(/obj/item/natural/wood/plank = 2)
+ verbage_simple = "build"
+ verbage = "builds"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/structure/crate
+ name = "old crate"
+ category = "Containers"
+ result = /obj/structure/closet/crate/chest/old_crate
+ reqs = list(/obj/item/grown/log/tree/small = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 0
+
+/datum/crafting_recipe/roguetown/structure/chest_sturdy
+ name = "sturdy chest"
+ category = "Containers"
+ result = /obj/structure/closet/crate/chest/neu
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+
+/datum/crafting_recipe/roguetown/structure/chest_sturdy_iron
+ name = "reinforced chest"
+ category = "Containers"
+ result = /obj/structure/closet/crate/chest/neu_iron
+ reqs = list(/obj/item/natural/wood/plank = 1, /obj/item/scrap = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 2
+
+/datum/crafting_recipe/roguetown/structure/closet_dark
+ name = "dark closet"
+ category = "Containers"
+ result = /obj/structure/closet/crate/roguecloset/dark
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+
+/datum/crafting_recipe/roguetown/structure/closet_alt
+ name = "closet (alt)"
+ category = "Containers"
+ result = /obj/structure/closet/crate/roguecloset/inn
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+ craftdiff = 1
+
+/datum/crafting_recipe/roguetown/structure/deer_trophy
+ name = "saiga trophy"
+ result = /obj/structure/rogue/trophy/deer
+ reqs = list(/obj/item/natural/wood/plank = 1, /obj/item/natural/head/saiga = 1)
+ verbage_simple = "build"
+ verbage = "builds"
+ skillcraft = /datum/skill/craft/carpentry
+ wallcraft = TRUE
+ craftdiff = 1
+
+/datum/crafting_recipe/roguetown/structure/chair_plain
+ name = "wooden chair (plain)"
+ category = "Seats"
+ result = /obj/item/chair/rogue/chair3
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+
+/datum/crafting_recipe/roguetown/structure/bench_plain
+ name = "wooden bench (plain)"
+ category = "Seats"
+ result = /obj/structure/chair/bench/church/smallbench
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+
+/datum/crafting_recipe/roguetown/structure/bookcase
+ name = "Bookcase"
+ result = /obj/structure/bookcase
+ reqs = list(/obj/item/natural/wood/plank = 2)
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+
+/datum/crafting_recipe/roguetown/structure/plat_edge
+ name = "platform edge"
+ category = "Railings"
+ result = /obj/structure/fluff/railing/plat_edge
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ ontile = TRUE
+ verbage_simple = "construct"
+ verbage = "constructs"
+ skillcraft = /datum/skill/craft/carpentry
+ buildsame = TRUE
+ craftdiff = 1
+
// Caustic Edit End
diff --git a/code/modules/roguetown/roguecrafting/turfs.dm b/code/modules/roguetown/roguecrafting/turfs.dm
index fd943fbae41..407e7636686 100644
--- a/code/modules/roguetown/roguecrafting/turfs.dm
+++ b/code/modules/roguetown/roguecrafting/turfs.dm
@@ -390,7 +390,7 @@
/datum/crafting_recipe/roguetown/turfs/hay
name = "floor (hay)"
result = /turf/open/floor/rogue/hay
- reqs = list(/obj/item/natural/chaff/wheat = 2)
+ reqs = list(/obj/item/natural/fibers = 2) // Caustic Edit. Using a whole 2 wheat is very expensive for just 1 tile
skillcraft = /datum/skill/craft/crafting
verbage_simple = "assemble"
verbage = "assembles"
@@ -519,3 +519,41 @@
reqs = list(/obj/item/grown/log/tree/small = 2, /obj/item/natural/glass = 1, /obj/item/ingot/iron = 1)
craftdiff = 3
category = "Windows"
+
+// Caustic Edit Start
+
+/datum/crafting_recipe/roguetown/turfs/wood/roofg
+ name = "wooden shingles"
+ result = /turf/open/floor/rogue/rooftop/green
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ skillcraft = /datum/skill/craft/carpentry
+ verbage_simple = "construct"
+ verbage = "constructs"
+ craftdiff = 3
+ category = "Floors"
+
+/datum/crafting_recipe/roguetown/turfs/wood/roofg/corner
+ name = "wooden shingles (corner)"
+ result = /turf/open/floor/rogue/rooftop/green
+ diagonal = TRUE
+
+/datum/crafting_recipe/roguetown/turfs/wood/roofg/alt
+ name = "wooden shingles (alt)"
+ result = /turf/open/floor/rogue/rooftop/green/alt
+
+/datum/crafting_recipe/roguetown/turfs/wood/roofg/corner_alt
+ name = "wooden shingles (alt corner)"
+ result = /turf/open/floor/rogue/rooftop/green/alt
+ diagonal = TRUE
+
+/datum/crafting_recipe/roguetown/turfs/wood/roof
+ name = "wooden shingles (brown)" // No corner sprites for these ones, sadly
+ result = /turf/open/floor/rogue/rooftop
+ reqs = list(/obj/item/natural/wood/plank = 1)
+ skillcraft = /datum/skill/craft/carpentry
+ verbage_simple = "construct"
+ verbage = "constructs"
+ craftdiff = 3
+ category = "Floors"
+
+// Caustic Edit End
diff --git a/icons/turf/roguefloor.dmi b/icons/turf/roguefloor.dmi
index d1060d9146f..6ce764ce33f 100644
Binary files a/icons/turf/roguefloor.dmi and b/icons/turf/roguefloor.dmi differ
diff --git a/modular_causticcove/code/game/objects/items/rogueitems/plumb.dm b/modular_causticcove/code/game/objects/items/rogueitems/plumb.dm
new file mode 100644
index 00000000000..2a1c8723699
--- /dev/null
+++ b/modular_causticcove/code/game/objects/items/rogueitems/plumb.dm
@@ -0,0 +1,111 @@
+// Plumb! To pixelshift structures
+
+/obj/item/plumbbob
+ name = "builder's plumb"
+ desc = "A traditional plumb, used by carpenters and other makers to ensure that angles are straight, and if not, adjust them as needed.
Traditionally made with lead, this one is made out of cheaper, and equally effective stone attached to a spool of twine."
+ icon = 'modular_causticcove/icons/obj/plumb.dmi'
+ icon_state = "plumb_bob"
+ slot_flags = ITEM_SLOT_HIP
+ grid_height = 64
+ grid_width = 32
+
+ var/x_change = 0
+ var/y_change = 0
+ var/layer_change = 2.9
+ var/rotation = 0
+
+ var/list/structure_blacklist = list(
+ /obj/structure/roguewindow,
+ /obj/structure/mineral_door,
+ /obj/structure/bars,
+ /obj/structure/dungeon_entry,
+ /obj/structure/far_travel,
+ /obj/structure/minecart_rail,
+ /obj/structure/ladder,
+ /obj/structure/flora/newtree, // Could add the other flora types, but moving flowers can be pretty
+ /obj/structure/flora/newbranch,
+ /obj/structure/flora/newleaf,
+ /obj/structure/table, // Tables and shelves get weird when offset
+ /obj/structure/rack/rogue/shelf,
+ /obj/structure/fluff/railing,
+ )
+
+/obj/item/plumbbob/examine(mob/user)
+ . = ..()
+ . += span_notice("Current offsets: X axis - [x_change]. Y axis - [y_change]. Layer - [layer_change]. Rotation - [rotation]. ")
+
+/obj/item/plumbbob/attack_self(mob/living/user)
+ . = ..()
+ if(.)
+ return
+ var/choice = input(user, "Which parameter?", "DECORATION", name) as null|anything in list("X axis","Y axis","Layer","Rotation")
+ if(!choice || !user)
+ return
+ switch(choice)
+ if("X axis")
+ var/offset = input(user, "X AXIS", "DECORATION", 0) as null|num
+ x_change = offset
+ if(offset > 32)
+ x_change = 32
+ if(offset < -32)
+ x_change = -32
+ to_chat(user, "The X axis offset has been set to: [x_change]")
+ if("Y axis")
+ var/offset = input(user, "Y AXIS", "DECORATION", 0) as null|num
+ y_change = offset
+ if(offset > 32)
+ y_change = 32
+ if(offset < -32)
+ y_change = -32
+ to_chat(user, "The Y axis offset has been set to: [y_change]")
+ if("Layer")
+ var/offset = input(user, "LAYER", "DECORATION", 2.91) as null|num
+ layer_change = offset
+ to_chat(user, "The layer offset has been set to: [layer_change]. (Default is 2.91)")
+ if("Rotation")
+ var/offset = input(user, "ROTATION", "DECORATION", 0) as null|num
+ rotation = offset
+ to_chat(user, "The rotation offset has been set to: [rotation]")
+ return
+
+/obj/item/plumbbob/attack_right(mob/living/user)
+ . = ..()
+ x_change = 0
+ y_change = 0
+ layer_change = 2.9
+ rotation = 0
+ to_chat(user, "The [name] has been reset.")
+ return
+
+/obj/item/plumbbob/attack_obj(obj/target, mob/living/user)
+ if(is_type_in_list(target,structure_blacklist))
+ to_chat(user, "[target.name]'s position cannot be adjusted.")
+ return
+ if(do_after(user, 1 SECONDS))
+ visible_message("[user] uses the plumb to adjust the [target]'s position.", "I adjust the [target]'s position.")
+ var/matrix/M = matrix()
+ M.Turn(rotation)
+ M.Translate(x_change,y_change)
+ target.layer = layer_change
+ target.transform = M
+ var/was_dense = initial(target.density)
+ if(was_dense)
+ if(x_change >= 10 || x_change <= -10 || y_change >= 10 || y_change <= -10)
+ target.density = FALSE
+ else
+ target.density = TRUE
+ return
+ else
+ to_chat(user, "I must stand still to adjust the [target.name]'s position.")
+ return
+
+
+/datum/crafting_recipe/roguetown/survival/plumbbob
+ name = "builder's plumb"
+ category = "Tools"
+ result = /obj/item/plumbbob
+ reqs = list(
+ /obj/item/natural/fibers = 2,
+ /obj/item/natural/whetstone = 1,
+ )
+ craftdiff = 2
diff --git a/modular_causticcove/icons/obj/plumb.dmi b/modular_causticcove/icons/obj/plumb.dmi
new file mode 100644
index 00000000000..422c30d1ef6
Binary files /dev/null and b/modular_causticcove/icons/obj/plumb.dmi differ
diff --git a/roguetown.dme b/roguetown.dme
index 04fe89223ce..f2e24e55636 100644
--- a/roguetown.dme
+++ b/roguetown.dme
@@ -3479,6 +3479,7 @@
#include "modular_causticcove\code\game\objects\items\clothes\stockings.dm"
#include "modular_causticcove\code\game\objects\items\rogueitems\leash.dm"
#include "modular_causticcove\code\game\objects\items\rogueitems\util.dm"
+#include "modular_causticcove\code\game\objects\items\rogueitems\plumb.dm"
#include "modular_causticcove\code\game\objects\items\weapons\ranged\ammo_bullets.dm"
#include "modular_causticcove\code\game\objects\items\weapons\ranged\blackpowder.dm"
#include "modular_causticcove\code\game\objects\structures\staircase_helper.dm"