mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
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:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user