diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm
index 0dbd63f7e86..de4f374e836 100644
--- a/code/modules/admin/buildmode.dm
+++ b/code/modules/admin/buildmode.dm
@@ -5,7 +5,8 @@
#define AREA_BUILDMODE 5
#define COPY_BUILDMODE 6
#define AREAEDIT_BUILDMODE 7
-#define NUM_BUILDMODES 7
+#define FILL_BUILDMODE 8
+#define NUM_BUILDMODES 8
/obj/screen/buildmode
icon = 'icons/misc/buildmode.dmi'
@@ -204,6 +205,11 @@
user << "Right Mouse Button on obj/turf/mob = Select area to paint"
user << "Right Mouse Button on buildmode button = Create new area"
user << "***********************************************************"
+ if(FILL_BUILDMODE)
+ user << "***********************************************************"
+ user << "Left Mouse Button on turf/obj/mob = Select corner"
+ user << "Right Mouse Button on buildmode button = Select object type"
+ user << "***********************************************************"
/datum/click_intercept/buildmode/proc/change_settings(mob/user)
switch(mode)
@@ -264,6 +270,19 @@
storedarea.always_unpowered = 0
storedarea.name = areaname
areaimage.loc = storedarea
+ if(FILL_BUILDMODE)
+ var/target_path = input(user,"Enter typepath:" ,"Typepath","/obj/structure/closet")
+ objholder = text2path(target_path)
+ if(!ispath(objholder))
+ objholder = pick_closest_path(target_path)
+ if(!objholder || ispath(objholder, /area))
+ objholder = /obj/structure/closet
+ return
+ else
+ if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
+ objholder = /obj/structure/closet
+ cornerA = null
+ cornerB = null
/datum/click_intercept/buildmode/proc/change_dir()
switch(build_dir)
@@ -441,3 +460,25 @@
var/turf/T = get_turf(object)
storedarea = get_area(T)
areaimage.loc = storedarea
+ if(FILL_BUILDMODE)
+ if(!cornerA)
+ cornerA = select_tile(get_turf(object))
+ return
+ if(cornerA && !cornerB)
+ cornerB = select_tile(get_turf(object))
+ if(left_click) //rectangular
+ if(cornerA && cornerB)
+ if(!objholder)
+ user << "Select object type first."
+ else
+ for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB)))
+ if(ispath(objholder,/turf))
+ T.ChangeTurf(objholder)
+ else
+ var/obj/A = new objholder(T)
+ A.dir = build_dir
+ deselect_region()
+ return
+
+ //Something wrong - Reset
+ deselect_region()
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index 3ac5c80d1a5..92519833fde 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ