Admin "Reload Station" Map Generator - Reloads specified block to roundstart. (#28986)

Badmins: Buildmode map generators have names in the list to select them, instead of paths.

Also, a new map generator has been added, repair/reload station. Use it VERY sparingly, it deletes the block of the map and reloads it to roundstart. THIS CAN CAUSE ISSUES WITH MACHINES AND ATMOSPHERICS, SO DO NOT USE IT UNLESS YOU ABSOLUTELY HAVE TO!

The reload station one tagged DO NOT USE shouldn't be used as it doesn't delete anything before loading, so if you use it you'll have two copies of things. That can result in a LOT of issues, so don't use it unless you're a codermin and know what you're doing/abusing!
This commit is contained in:
kevinz000
2017-07-28 16:43:43 -07:00
committed by oranges
parent 58544b3b20
commit d951b65eba
13 changed files with 166 additions and 38 deletions

View File

@@ -129,7 +129,7 @@
return FALSE return FALSE
var/list/large_dense = list() var/list/large_dense = list()
//Next, check objects to block entry that are on the border //Next, check objects to block entry that are on the border
for(var/atom/movable/border_obstacle in src) for(var/atom/movable/border_obstacle in src)
if(border_obstacle.flags & ON_BORDER) if(border_obstacle.flags & ON_BORDER)
@@ -209,14 +209,14 @@
qdel(L) qdel(L)
//wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself //wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself
/turf/proc/TerraformTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE) /turf/proc/TerraformTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE)
return ChangeTurf(path, new_baseturf, defer_change, ignore_air) return ChangeTurf(path, new_baseturf, defer_change, ignore_air, forceop)
//Creates a new turf //Creates a new turf
/turf/proc/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE) /turf/proc/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE)
if(!path) if(!path)
return return
if(!GLOB.use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed if(!GLOB.use_preloader && path == type && !forceop) // Don't no-op if the map loader requires it to be reconstructed
return src return src
var/old_baseturf = baseturf var/old_baseturf = baseturf
@@ -419,17 +419,17 @@
if(!SSticker.HasRoundStarted()) if(!SSticker.HasRoundStarted())
add_blueprints(AM) add_blueprints(AM)
/turf/proc/empty(turf_type=/turf/open/space, baseturf_type) /turf/proc/empty(turf_type=/turf/open/space, baseturf_type, delmobs = TRUE, forceop = FALSE)
// Remove all atoms except observers, landmarks, docking ports // Remove all atoms except observers, landmarks, docking ports
var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object))
var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(),ignored_atoms) var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(),delmobs? ignored_atoms : ignored_atoms + typecacheof(list(/mob)))
allowed_contents -= src allowed_contents -= src
for(var/i in 1 to allowed_contents.len) for(var/i in 1 to allowed_contents.len)
var/thing = allowed_contents[i] var/thing = allowed_contents[i]
qdel(thing, force=TRUE) qdel(thing, force=TRUE)
var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE) var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop = forceop)
SSair.remove_from_active(newT) SSair.remove_from_active(newT)
newT.CalculateAdjacentTurfs() newT.CalculateAdjacentTurfs()
SSair.add_to_active(newT,1) SSair.add_to_active(newT,1)
@@ -437,7 +437,6 @@
/turf/proc/is_transition_turf() /turf/proc/is_transition_turf()
return return
/turf/acid_act(acidpwr, acid_volume) /turf/acid_act(acidpwr, acid_volume)
. = 1 . = 1
var/acid_type = /obj/effect/acid var/acid_type = /obj/effect/acid

View File

@@ -194,11 +194,14 @@
valueholder = input(user,"Enter variable value:" ,"Value") as turf in world valueholder = input(user,"Enter variable value:" ,"Value") as turf in world
if(AREA_BUILDMODE) if(AREA_BUILDMODE)
var/list/gen_paths = subtypesof(/datum/mapGenerator) var/list/gen_paths = subtypesof(/datum/mapGenerator)
var/list/options = list()
var/type = input(user,"Select Generator Type","Type") as null|anything in gen_paths for(var/path in gen_paths)
var/datum/mapGenerator/MP = path
options[initial(MP.buildmode_name)] = path
var/type = input(user,"Select Generator Type","Type") as null|anything in options
if(!type) return if(!type) return
generator_path = type generator_path = options[type]
cornerA = null cornerA = null
cornerB = null cornerB = null
@@ -342,7 +345,12 @@
if(cornerA && cornerB) if(cornerA && cornerB)
if(!generator_path) if(!generator_path)
to_chat(user, "<span class='warning'>Select generator type first.</span>") to_chat(user, "<span class='warning'>Select generator type first.</span>")
return
var/datum/mapGenerator/G = new generator_path var/datum/mapGenerator/G = new generator_path
if(istype(G, /datum/mapGenerator/repair/reload_station_map))
if(GLOB.reloading_map)
to_chat(user, "<span class='boldwarning'>You are already reloading an area! Please wait for it to fully finish loading before trying to load another!</span>")
return
G.defineRegion(cornerA,cornerB,1) G.defineRegion(cornerA,cornerB,1)
G.generate() G.generate()
cornerA = null cornerA = null

View File

@@ -29,21 +29,21 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
* 2) Read the map line by line, parsing the result (using parse_grid) * 2) Read the map line by line, parsing the result (using parse_grid)
* *
*/ */
/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num, no_changeturf as num) /dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num, no_changeturf as num, lower_crop_x as num, lower_crop_y as num, upper_crop_x as num, upper_crop_y as num)
//How I wish for RAII //How I wish for RAII
Master.StartLoadingMap() Master.StartLoadingMap()
space_key = null space_key = null
#ifdef TESTING #ifdef TESTING
turfsSkipped = 0 turfsSkipped = 0
#endif #endif
. = load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf) . = load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, lower_crop_x, upper_crop_x, lower_crop_y, upper_crop_y)
#ifdef TESTING #ifdef TESTING
if(turfsSkipped) if(turfsSkipped)
testing("Skipped loading [turfsSkipped] default turfs") testing("Skipped loading [turfsSkipped] default turfs")
#endif #endif
Master.StopLoadingMap() Master.StopLoadingMap()
/dmm_suite/proc/load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf) /dmm_suite/proc/load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, x_lower = -INFINITY, x_upper = INFINITY, y_lower = -INFINITY, y_upper = INFINITY)
var/tfile = dmm_file//the map file we're creating var/tfile = dmm_file//the map file we're creating
if(isfile(tfile)) if(isfile(tfile))
tfile = file2text(tfile) tfile = file2text(tfile)
@@ -60,6 +60,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
var/key_len = 0 var/key_len = 0
var/stored_index = 1 var/stored_index = 1
while(dmmRegex.Find(tfile, stored_index)) while(dmmRegex.Find(tfile, stored_index))
stored_index = dmmRegex.next stored_index = dmmRegex.next
@@ -81,7 +82,12 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
if(!key_len) if(!key_len)
throw EXCEPTION("Coords before model definition in DMM") throw EXCEPTION("Coords before model definition in DMM")
var/xcrdStart = text2num(dmmRegex.group[3]) + x_offset - 1 var/curr_x = text2num(dmmRegex.group[3])
if(curr_x < x_lower || curr_x > x_upper)
continue
var/xcrdStart = curr_x + x_offset - 1
//position of the currently processed square //position of the currently processed square
var/xcrd var/xcrd
var/ycrd = text2num(dmmRegex.group[4]) + y_offset - 1 var/ycrd = text2num(dmmRegex.group[4]) + y_offset - 1
@@ -96,7 +102,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
if(!no_changeturf) if(!no_changeturf)
WARNING("Z-level expansion occurred without no_changeturf set, this may cause problems when /turf/AfterChange is called") WARNING("Z-level expansion occurred without no_changeturf set, this may cause problems when /turf/AfterChange is called")
bounds[MAP_MINX] = min(bounds[MAP_MINX], xcrdStart) bounds[MAP_MINX] = min(bounds[MAP_MINX], Clamp(xcrdStart, x_lower, x_upper))
bounds[MAP_MINZ] = min(bounds[MAP_MINZ], zcrd) bounds[MAP_MINZ] = min(bounds[MAP_MINZ], zcrd)
bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], zcrd) bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], zcrd)
@@ -113,15 +119,15 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
if(gridLines.len && gridLines[gridLines.len] == "") if(gridLines.len && gridLines[gridLines.len] == "")
gridLines.Cut(gridLines.len) // Remove only one blank line at the end. gridLines.Cut(gridLines.len) // Remove only one blank line at the end.
bounds[MAP_MINY] = min(bounds[MAP_MINY], ycrd) bounds[MAP_MINY] = min(bounds[MAP_MINY], Clamp(ycrd, y_lower, y_upper))
ycrd += gridLines.len - 1 // Start at the top and work down ycrd += gridLines.len - 1 // Start at the top and work down
if(!cropMap && ycrd > world.maxy) if(!cropMap && ycrd > world.maxy)
if(!measureOnly) if(!measureOnly)
world.maxy = ycrd // Expand Y here. X is expanded in the loop below world.maxy = ycrd // Expand Y here. X is expanded in the loop below
bounds[MAP_MAXY] = max(bounds[MAP_MAXY], ycrd) bounds[MAP_MAXY] = max(bounds[MAP_MAXY], Clamp(ycrd, y_lower, y_upper))
else else
bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy)) bounds[MAP_MAXY] = max(bounds[MAP_MAXY], Clamp(min(ycrd, world.maxy), y_lower, y_upper))
var/maxx = xcrdStart var/maxx = xcrdStart
if(measureOnly) if(measureOnly)
@@ -129,9 +135,15 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
maxx = max(maxx, xcrdStart + length(line) / key_len - 1) maxx = max(maxx, xcrdStart + length(line) / key_len - 1)
else else
for(var/line in gridLines) for(var/line in gridLines)
if((ycrd - y_offset + 1) < y_lower || (ycrd - y_offset + 1) > y_upper) //Reverse operation and check if it is out of bounds of cropping.
--ycrd
continue
if(ycrd <= world.maxy && ycrd >= 1) if(ycrd <= world.maxy && ycrd >= 1)
xcrd = xcrdStart xcrd = xcrdStart
for(var/tpos = 1 to length(line) - key_len + 1 step key_len) for(var/tpos = 1 to length(line) - key_len + 1 step key_len)
if((xcrd - x_offset + 1) < x_lower || (xcrd - x_offset + 1) > x_upper) //Same as above.
++xcrd
continue //X cropping.
if(xcrd > world.maxx) if(xcrd > world.maxx)
if(cropMap) if(cropMap)
break break
@@ -154,7 +166,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
++xcrd ++xcrd
--ycrd --ycrd
bounds[MAP_MAXX] = max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx) bounds[MAP_MAXX] = Clamp(max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx), x_lower, x_upper)
CHECK_TICK CHECK_TICK
@@ -343,7 +355,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
/dmm_suite/proc/create_atom(path, crds) /dmm_suite/proc/create_atom(path, crds)
set waitfor = FALSE set waitfor = FALSE
. = new path (crds) . = new path (crds)
//text trimming (both directions) helper proc //text trimming (both directions) helper proc
//optionally removes quotes before and after the text (for variable name) //optionally removes quotes before and after the text (for variable name)
/dmm_suite/proc/trim_text(what as text,trim_quotes=0) /dmm_suite/proc/trim_text(what as text,trim_quotes=0)

View File

@@ -17,7 +17,6 @@
//All //All
#define CLUSTER_CHECK_ALL 30 //Don't let anything cluster, like, at all #define CLUSTER_CHECK_ALL 30 //Don't let anything cluster, like, at all
/datum/mapGenerator /datum/mapGenerator
//Map information //Map information
@@ -26,8 +25,12 @@
//mapGeneratorModule information //mapGeneratorModule information
var/list/modules = list() var/list/modules = list()
var/buildmode_name = "Undocumented"
/datum/mapGenerator/New() /datum/mapGenerator/New()
..() ..()
if(buildmode_name == "Undocumented")
buildmode_name = copytext("[type]", 20) // / d a t u m / m a p g e n e r a t o r / = 20 characters.
initialiseModules() initialiseModules()
//Defines the region the map represents, sets map //Defines the region the map represents, sets map

View File

@@ -20,13 +20,25 @@
/datum/mapGeneratorModule/bottomLayer/massdelete /datum/mapGeneratorModule/bottomLayer/massdelete
spawnableAtoms = list() spawnableAtoms = list()
spawnableTurfs = list() spawnableTurfs = list()
var/deletemobs = TRUE
var/deleteturfs = TRUE
/datum/mapGeneratorModule/bottomLayer/massdelete/generate() /datum/mapGeneratorModule/bottomLayer/massdelete/generate()
if(!mother) if(!mother)
return return
for(var/V in mother.map) for(var/V in mother.map)
var/turf/T = V var/turf/T = V
T.empty() T.empty(deleteturfs? null : T.type, delmobs = deletemobs, forceop = TRUE)
/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs
deletemobs = FALSE
/datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs
deleteturfs = FALSE
/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete
deletemobs = FALSE
deleteturfs = FALSE
//Only places atoms/turfs on area borders //Only places atoms/turfs on area borders
/datum/mapGeneratorModule/border /datum/mapGeneratorModule/border

View File

@@ -29,17 +29,21 @@
/datum/mapGenerator/asteroid/hollow /datum/mapGenerator/asteroid/hollow
modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \ modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \
/datum/mapGeneratorModule/border/asteroidWalls) /datum/mapGeneratorModule/border/asteroidWalls)
buildmode_name = "Pattern: Asteroid Room \[AIRLESS!\]"
/datum/mapGenerator/asteroid/hollow/random /datum/mapGenerator/asteroid/hollow/random
modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \ modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \
/datum/mapGeneratorModule/border/asteroidWalls, \ /datum/mapGeneratorModule/border/asteroidWalls, \
/datum/mapGeneratorModule/splatterLayer/asteroidWalls) /datum/mapGeneratorModule/splatterLayer/asteroidWalls)
buildmode_name = "Pattern: Asteroid Room: Splatter Walls \[AIRLESS!\]"
/datum/mapGenerator/asteroid/hollow/random/monsters /datum/mapGenerator/asteroid/hollow/random/monsters
modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \ modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \
/datum/mapGeneratorModule/border/asteroidWalls, \ /datum/mapGeneratorModule/border/asteroidWalls, \
/datum/mapGeneratorModule/splatterLayer/asteroidWalls, \ /datum/mapGeneratorModule/splatterLayer/asteroidWalls, \
/datum/mapGeneratorModule/splatterLayer/asteroidMonsters) /datum/mapGeneratorModule/splatterLayer/asteroidMonsters)
buildmode_name = "Pattern: Asteroid Room: Splatter Walls + Monsters \[AIRLESS!\]"
/datum/mapGenerator/asteroid/filled /datum/mapGenerator/asteroid/filled
modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidWalls) modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidWalls)
buildmode_name = "Block: Asteroid Walls"

View File

@@ -4,28 +4,30 @@
/datum/mapGeneratorModule/border/cultWalls /datum/mapGeneratorModule/border/cultWalls
spawnableTurfs = list(/turf/closed/wall/mineral/cult = 100) spawnableTurfs = list(/turf/closed/wall/mineral/cult = 100)
/datum/mapGeneratorModule/bottomLayer/clockFloor /datum/mapGeneratorModule/bottomLayer/clockFloor
spawnableTurfs = list(/turf/open/floor/clockwork = 100) spawnableTurfs = list(/turf/open/floor/clockwork = 100)
/datum/mapGeneratorModule/border/clockWalls /datum/mapGeneratorModule/border/clockWalls
spawnableTurfs = list(/turf/closed/wall/clockwork = 100) spawnableTurfs = list(/turf/closed/wall/clockwork = 100)
/datum/mapGenerator/cult //walls and floor only /datum/mapGenerator/cult //walls and floor only
modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \
/datum/mapGeneratorModule/border/cultWalls, \ /datum/mapGeneratorModule/border/cultWalls, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Cult Room"
/datum/mapGenerator/clock //walls and floor only /datum/mapGenerator/clock //walls and floor only
modules = list(/datum/mapGeneratorModule/bottomLayer/clockFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/clockFloor, \
/datum/mapGeneratorModule/border/clockWalls, \ /datum/mapGeneratorModule/border/clockWalls, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Clockwork Room"
/datum/mapGenerator/cult/floor //floors only /datum/mapGenerator/cult/floor //floors only
modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Block: Cult Floor"
/datum/mapGenerator/clock/floor //floor only /datum/mapGenerator/clock/floor //floor only
modules = list(/datum/mapGeneratorModule/bottomLayer/clockFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/clockFloor, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Block: Clockwork Floor"

View File

@@ -1,3 +1,4 @@
/datum/mapGenerator/lavaland /datum/mapGenerator/lavaland
var/start_z = 5 var/start_z = 5
var/min_x = 0 var/min_x = 0
@@ -5,6 +6,7 @@
var/max_x = 0 var/max_x = 0
var/max_y = 0 var/max_y = 0
modules = list(/datum/mapGeneratorModule/river) modules = list(/datum/mapGeneratorModule/river)
buildmode_name = "Pattern: Lava Rivers"
/datum/mapGenerator/lavaland/defineRegion(turf/Start, turf/End, replace = 0) /datum/mapGenerator/lavaland/defineRegion(turf/Start, turf/End, replace = 0)
start_z = Start.z start_z = Start.z

View File

@@ -22,9 +22,12 @@
/datum/mapGenerator/lavaland/ground_only /datum/mapGenerator/lavaland/ground_only
modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_default) modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_default)
buildmode_name = "Block: Lavaland Floor"
/datum/mapGenerator/lavaland/dense_ores /datum/mapGenerator/lavaland/dense_ores
modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_mineral/dense) modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_mineral/dense)
buildmode_name = "Block: Lavaland Ores: Dense"
/datum/mapGenerator/lavaland/normal_ores /datum/mapGenerator/lavaland/normal_ores
modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_mineral) modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_mineral)
buildmode_name = "Block: Lavaland Ores"

View File

@@ -8,4 +8,4 @@
/datum/mapGeneratorModule/randBushes, \ /datum/mapGeneratorModule/randBushes, \
/datum/mapGeneratorModule/randRocks, \ /datum/mapGeneratorModule/randRocks, \
/datum/mapGeneratorModule/denseLayer/grassTufts) /datum/mapGeneratorModule/denseLayer/grassTufts)
buildmode_name = "Pattern: Nature"

View File

@@ -16,16 +16,92 @@
spawnableTurfs = list(/turf/closed/wall = 100) spawnableTurfs = list(/turf/closed/wall = 100)
allowAtomsOnSpace = TRUE allowAtomsOnSpace = TRUE
/datum/mapGeneratorModule/reload_station_map/generate()
if(!istype(mother, /datum/mapGenerator/repair/reload_station_map))
return
var/datum/mapGenerator/repair/reload_station_map/mother1 = mother
if(mother1.z != ZLEVEL_STATION)
return //This is only for reloading station blocks!
GLOB.reloading_map = TRUE
var/static/dmm_suite/reloader = new
var/list/bounds = reloader.load_map(file(SSmapping.config.GetFullMapPath()),measureOnly = FALSE, no_changeturf = FALSE,x_offset = 0, y_offset = 0, z_offset = ZLEVEL_STATION, cropMap=TRUE, lower_crop_x = mother1.x_low, lower_crop_y = mother1.y_low, upper_crop_x = mother1.x_high, upper_crop_y = mother1.y_high)
var/list/obj/machinery/atmospherics/atmos_machines = list()
var/list/obj/structure/cable/cables = list()
var/list/atom/atoms = list()
repopulate_sorted_areas()
for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]),
locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])))
set waitfor = FALSE
var/turf/B = L
atoms += B
for(var/A in B)
atoms += A
if(istype(A,/obj/structure/cable))
cables += A
continue
if(istype(A,/obj/machinery/atmospherics))
atmos_machines += A
SSatoms.InitializeAtoms(atoms)
SSmachines.setup_template_powernets(cables)
SSair.setup_template_machinery(atmos_machines)
GLOB.reloading_map = FALSE
/datum/mapGenerator/repair /datum/mapGenerator/repair
modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel, modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel,
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Repair: Floor"
/datum/mapGenerator/repair/delete_walls /datum/mapGenerator/repair/delete_walls
modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten, modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten,
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Repair: Floor: Flatten Walls"
/datum/mapGenerator/repair/enclose_room /datum/mapGenerator/repair/enclose_room
modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten, modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten,
/datum/mapGeneratorModule/border/normalWalls, /datum/mapGeneratorModule/border/normalWalls,
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Repair: Generate Aired Room"
/datum/mapGenerator/repair/reload_station_map
modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs)
var/x_low = 0
var/x_high = 0
var/y_low = 0
var/y_high = 0
var/z = 0
var/cleanload = FALSE
var/datum/mapGeneratorModule/reload_station_map/loader
buildmode_name = "Repair: Reload Block \[DO NOT USE\]"
/datum/mapGenerator/repair/reload_station_map/clean
buildmode_name = "Repair: Reload Block - Mass Delete"
cleanload = TRUE
/datum/mapGenerator/repair/reload_station_map/clean/in_place
modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete)
buildmode_name = "Repair: Reload Block - Mass Delete - In Place"
/datum/mapGenerator/repair/reload_station_map/defineRegion(turf/start, turf/end)
. = ..()
if(start.z != ZLEVEL_STATION || end.z != ZLEVEL_STATION)
return
x_low = min(start.x, end.x)
y_low = min(start.y, end.y)
x_high = max(start.x, end.x)
y_high = max(start.y, end.y)
z = ZLEVEL_STATION
GLOBAL_VAR_INIT(reloading_map, FALSE)
/datum/mapGenerator/repair/reload_station_map/generate(clean = cleanload)
if(!loader)
loader = new
if(cleanload)
..() //Trigger mass deletion.
modules |= loader
syncModules()
loader.generate()

View File

@@ -7,9 +7,11 @@
// Generators // Generators
/datum/mapGenerator/shuttle/full /datum/mapGenerator/shuttle/full
modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor, \
/datum/mapGeneratorModule/border/shuttleWalls,\ /datum/mapGeneratorModule/border/shuttleWalls,\
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Shuttle Room"
/datum/mapGenerator/shuttle/floor /datum/mapGenerator/shuttle/floor
modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor) modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor)
buildmode_name = "Block: Shuttle Floor"

View File

@@ -1,3 +1,4 @@
// Modules // Modules
/turf/open/floor/plasteel/shuttle/red/syndicate /turf/open/floor/plasteel/shuttle/red/syndicate
@@ -14,8 +15,8 @@
/datum/mapGeneratorModule/syndieFurniture /datum/mapGeneratorModule/syndieFurniture
clusterCheckFlags = CLUSTER_CHECK_ALL clusterCheckFlags = CLUSTER_CHECK_ALL
spawnableTurfs = list() spawnableTurfs = list()
spawnableAtoms = list(/obj/structure/table = 20, /obj/structure/chair = 15, /obj/structure/chair/stool = 10, spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/chair = 15,/obj/structure/chair/stool = 10, \
/obj/structure/frame/computer = 15, /obj/item/weapon/storage/toolbox/syndicate = 15, /obj/structure/frame/computer = 15, /obj/item/weapon/storage/toolbox/syndicate = 15 ,\
/obj/structure/closet/syndicate = 25, /obj/machinery/suit_storage_unit/syndicate = 15) /obj/structure/closet/syndicate = 25, /obj/machinery/suit_storage_unit/syndicate = 15)
/datum/mapGeneratorModule/splatterLayer/syndieMobs /datum/mapGeneratorModule/splatterLayer/syndieMobs
@@ -28,21 +29,24 @@
// Generators // Generators
/datum/mapGenerator/syndicate/empty //walls and floor only /datum/mapGenerator/syndicate/empty //walls and floor only
modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
/datum/mapGeneratorModule/border/syndieWalls,\ /datum/mapGeneratorModule/border/syndieWalls,\
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Shuttle Room: Syndicate"
/datum/mapGenerator/syndicate/mobsonly /datum/mapGenerator/syndicate/mobsonly
modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
/datum/mapGeneratorModule/border/syndieWalls,\ /datum/mapGeneratorModule/border/syndieWalls,\
/datum/mapGeneratorModule/splatterLayer/syndieMobs, \ /datum/mapGeneratorModule/splatterLayer/syndieMobs, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Shuttle Room: Syndicate: Mobs"
/datum/mapGenerator/syndicate/furniture /datum/mapGenerator/syndicate/furniture
modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
/datum/mapGeneratorModule/border/syndieWalls,\ /datum/mapGeneratorModule/border/syndieWalls,\
/datum/mapGeneratorModule/syndieFurniture, \ /datum/mapGeneratorModule/syndieFurniture, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Shuttle Room: Syndicate: Furniture"
/datum/mapGenerator/syndicate/full /datum/mapGenerator/syndicate/full
modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
@@ -50,3 +54,4 @@
/datum/mapGeneratorModule/syndieFurniture, \ /datum/mapGeneratorModule/syndieFurniture, \
/datum/mapGeneratorModule/splatterLayer/syndieMobs, \ /datum/mapGeneratorModule/splatterLayer/syndieMobs, \
/datum/mapGeneratorModule/bottomLayer/repressurize) /datum/mapGeneratorModule/bottomLayer/repressurize)
buildmode_name = "Pattern: Shuttle Room: Syndicate: All"