diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm
index ebe37bc9697..535ffed740e 100644
--- a/code/modules/admin/buildmode.dm
+++ b/code/modules/admin/buildmode.dm
@@ -4,7 +4,8 @@
#define THROW_BUILDMODE 4
#define AREA_BUILDMODE 5
#define COPY_BUILDMODE 6
-#define NUM_BUILDMODES 6
+#define AREAEDIT_BUILDMODE 7
+#define NUM_BUILDMODES 7
/obj/screen/buildmode
icon = 'icons/misc/buildmode.dmi'
@@ -128,11 +129,19 @@
var/varholder = "name"
var/valueholder = "derp"
var/objholder = /obj/structure/closet
+ var/area/storedarea = null
+ var/image/areaimage
var/atom/movable/stored = null
+/datum/click_intercept/buildmode/New(client/c)
+ ..()
+ areaimage = image('icons/turf/areas.dmi',null,"yellow")
+ holder.images += areaimage
+
/datum/click_intercept/buildmode/Destroy()
stored = null
Reset()
+ qdel(areaimage)
..()
/datum/click_intercept/buildmode/create_buttons()
@@ -188,6 +197,12 @@
user << "Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target"
user << "Right Mouse Button on obj/mob = Select target to copy"
user << "***********************************************************"
+ if(AREAEDIT_BUILDMODE)
+ user << "***********************************************************"
+ user << "Left Mouse Button on obj/turf/mob = Paint area"
+ user << "Right Mouse Button on obj/turf/mob = Select area to paint"
+ user << "Right Mouse Button on buildmode button = Create new area"
+ user << "***********************************************************"
/datum/click_intercept/buildmode/proc/change_settings(mob/user)
switch(mode)
@@ -199,7 +214,7 @@
objholder = text2path(target_path)
if(!ispath(objholder))
objholder = pick_closest_path(target_path)
- if(!objholder)
+ if(!objholder || ispath(objholder, /area))
objholder = /obj/structure/closet
alert("That path is not allowed.")
else
@@ -234,6 +249,20 @@
generator_path = type
cornerA = null
cornerB = null
+ if(AREAEDIT_BUILDMODE)
+ var/target_path = input(user,"Enter typepath:", "Typepath", "/area")
+ var/areatype = text2path(target_path)
+ if(ispath(areatype,/area))
+ var/areaname = input(user,"Enter area name:", "Area name", "Area")
+ if(!areaname || !length(areaname))
+ return
+ storedarea = new areatype
+ storedarea.power_equip = 0
+ storedarea.power_light = 0
+ storedarea.power_environ = 0
+ storedarea.always_unpowered = 0
+ storedarea.name = areaname
+ areaimage.loc = storedarea
/datum/click_intercept/buildmode/proc/change_dir()
switch(build_dir)
@@ -257,6 +286,10 @@
/datum/click_intercept/buildmode/proc/Reset()//Reset temporary variables
deselect_region()
+ if(mode == AREAEDIT_BUILDMODE)
+ areaimage.loc = storedarea
+ else
+ areaimage.loc = null
/datum/click_intercept/buildmode/proc/select_tile(var/turf/T)
return new /obj/effect/buildmode_reticule(T, holder)
@@ -396,3 +429,14 @@
if(ismovableatom(object)) // No copying turfs for now.
user << "[object] set as template."
stored = object
+ if(AREAEDIT_BUILDMODE)
+ if(left_click)
+ if(!storedarea)
+ return
+ var/turf/T = get_turf(object)
+ if(get_area(T) != storedarea)
+ storedarea.contents.Add(T)
+ else if(right_click)
+ var/turf/T = get_turf(object)
+ storedarea = get_area(T)
+ areaimage.loc = storedarea
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index ca9d1fd05cc..3ac5c80d1a5 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ