diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm
index 8ee15ad72e2..9fa4eb495e0 100644
--- a/code/modules/buildmode/buildmode.dm
+++ b/code/modules/buildmode/buildmode.dm
@@ -15,7 +15,7 @@
// Switching management
var/switch_state = BM_SWITCHSTATE_NONE
- var/switch_width = 5
+ var/switch_width = 4
// modeswitch UI
var/atom/movable/screen/buildmode/mode/modebutton
var/list/modeswitch_buttons = list()
@@ -72,7 +72,7 @@
buttons += new /atom/movable/screen/buildmode/quit(src)
// build the lists of switching buttons
build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /atom/movable/screen/buildmode/modeswitch)
- build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /atom/movable/screen/buildmode/dirswitch)
+ build_options_grid(GLOB.alldirs, dirswitch_buttons, /atom/movable/screen/buildmode/dirswitch)
// this creates a nice offset grid for choosing between buildmode options,
// because going "click click click ah hell" sucks.
diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm
index 6657e4286b4..1dbc5fbb348 100644
--- a/code/modules/buildmode/submodes/advanced.dm
+++ b/code/modules/buildmode/submodes/advanced.dm
@@ -1,6 +1,6 @@
/datum/buildmode_mode/advanced
key = "advanced"
- var/objholder = null
+ var/atom/objholder = null
// FIXME: add logic which adds a button displaying the icon
// of the currently selected path
@@ -47,6 +47,10 @@
log_admin("Build Mode: [key_name(c)] modified [T] in [AREACOORD(object)] to [objholder]")
T = T.ChangeTurf(objholder)
T.setDir(BM.build_dir)
+ else if(ispath(objholder, /obj/effect/turf_decal))
+ var/turf/T = get_turf(object)
+ T.AddElement(/datum/element/decal, initial(objholder.icon), initial(objholder.icon_state), BM.build_dir, FALSE, initial(objholder.color), null, null, initial(objholder.alpha))
+ log_admin("Build Mode: [key_name(c)] in [AREACOORD(object)] added a [initial(objholder.name)] decal with dir [BM.build_dir] to [T]")
else if(!isnull(objholder))
var/obj/A = new objholder (get_turf(object))
A.setDir(BM.build_dir)
diff --git a/code/modules/buildmode/submodes/area_edit.dm b/code/modules/buildmode/submodes/area_edit.dm
index 039f2897a88..ba0acb68161 100644
--- a/code/modules/buildmode/submodes/area_edit.dm
+++ b/code/modules/buildmode/submodes/area_edit.dm
@@ -1,5 +1,6 @@
/datum/buildmode_mode/area_edit
key = "areaedit"
+ use_corner_selection = TRUE
var/area/storedarea
var/image/areaimage
@@ -22,7 +23,8 @@
/datum/buildmode_mode/area_edit/show_help(client/c)
to_chat(c, "***********************************************************")
- to_chat(c, "Left Mouse Button on obj/turf/mob = Paint area")
+ to_chat(c, "Left Mouse Button on obj/turf/mob = Select corner")
+ to_chat(c, "Left Mouse Button + Alt on turf/obj/mob = Paint area/span>")
to_chat(c, "Right Mouse Button on obj/turf/mob = Select area to paint")
to_chat(c, "Right Mouse Button on buildmode button = Create new area")
to_chat(c, "***********************************************************")
@@ -49,11 +51,26 @@
if(!storedarea)
to_chat(c, "Configure or select the area you want to paint first!")
return
- var/turf/T = get_turf(object)
- if(get_area(T) != storedarea)
- log_admin("Build Mode: [key_name(c)] added [AREACOORD(T)] to [storedarea]")
- storedarea.contents.Add(T)
+ if(LAZYACCESS(modifiers, ALT_CLICK))
+ var/turf/T = get_turf(object)
+ if(get_area(T) != storedarea)
+ log_admin("Build Mode: [key_name(c)] added [AREACOORD(T)] to [storedarea]")
+ storedarea.contents.Add(T)
+ return
+ return ..()
else if(LAZYACCESS(modifiers, RIGHT_CLICK))
var/turf/T = get_turf(object)
storedarea = get_area(T)
areaimage.loc = storedarea // color our area
+
+/datum/buildmode_mode/area_edit/handle_selected_area(client/c, params)
+ var/list/modifiers = params2list(params)
+
+ if(LAZYACCESS(modifiers, LEFT_CLICK))
+ var/choice = alert("Are you sure you want to fill area?", "Area Fill Confirmation", "Yes", "No")
+ if(choice != "Yes")
+ return
+ for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB)))
+ storedarea.contents.Add(T)
+ log_admin("Build Mode: [key_name(c)] set the area of the region from [AREACOORD(cornerA)] through [AREACOORD(cornerB)] to [storedarea].")
+
diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm
index 59027b22a02..a5abd94fdd0 100644
--- a/code/modules/buildmode/submodes/basic.dm
+++ b/code/modules/buildmode/submodes/basic.dm
@@ -14,7 +14,7 @@
/datum/buildmode_mode/basic/handle_click(client/c, params, obj/object)
var/list/modifiers = params2list(params)
-
+
var/left_click = LAZYACCESS(modifiers, LEFT_CLICK)
var/right_click = LAZYACCESS(modifiers, RIGHT_CLICK)
var/alt_click = LAZYACCESS(modifiers, ALT_CLICK)
@@ -45,9 +45,9 @@
new/obj/machinery/door/airlock(get_turf(object))
else if(istype(object,/turf) && ctrl_click && left_click)
var/obj/structure/window/reinforced/window
- if(BM.build_dir == NORTHWEST)
+ if(BM.build_dir in GLOB.diagonals)
window = new /obj/structure/window/reinforced/fulltile(get_turf(object))
else
window = new /obj/structure/window/reinforced(get_turf(object))
- window.setDir(BM.build_dir)
+ window.setDir(BM.build_dir)
log_admin("Build Mode: [key_name(c)] built a window at [AREACOORD(object)]")
diff --git a/code/modules/buildmode/submodes/fill.dm b/code/modules/buildmode/submodes/fill.dm
index 68fd1b66cfe..f2d37cdfcd5 100644
--- a/code/modules/buildmode/submodes/fill.dm
+++ b/code/modules/buildmode/submodes/fill.dm
@@ -4,7 +4,7 @@
key = "fill"
use_corner_selection = TRUE
- var/objholder = null
+ var/atom/objholder = null
/datum/buildmode_mode/fill/show_help(client/c)
to_chat(c, "***********************************************************")
@@ -64,6 +64,8 @@
if(ispath(objholder,/turf))
T = T.ChangeTurf(objholder)
T.setDir(BM.build_dir)
+ else if(ispath(objholder, /obj/effect/turf_decal))
+ T.AddElement(/datum/element/decal, initial(objholder.icon), initial(objholder.icon_state), BM.build_dir, FALSE, initial(objholder.color), null, null, initial(objholder.alpha))
else
var/obj/A = new objholder(T)
A.setDir(BM.build_dir)
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index edb635e7f2e..d744824c91d 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ