Add bapi-dmm to reduce startup time by... a lot (#16148)

* Add bapi-dmm, a rust maploader that goes BRRRRRRR

* A few more maps switched away from file paths

* Update to include 48f4879d8704cb057a (better path error handling)
This commit is contained in:
ShadowLarkens
2024-10-26 04:32:41 -07:00
committed by GitHub
parent 1375d4c23b
commit a8affbd4ae
68 changed files with 1224 additions and 2936 deletions
+1
View File
@@ -113,6 +113,7 @@ jobs:
sudo apt update || true
sudo apt install zlib1g-dev:i386 libssl-dev:i386
ldd librust_g.so
ldd libbapi_dmm_reader.so
ldd libverdigris.so
- name: Unit Tests
run: |
+2
View File
@@ -38,3 +38,5 @@ package-lock.json
#These get built by some automatic process
tgui/public/tgui.bundle.css
tgui/public/tgui.bundle.js
#ignore tracy dll
prof.dll
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
// NEVER leave this on in your PR or the server will probably explode
// #define ENABLE_BYOND_TRACY
/datum/super_early_init
/datum/super_early_init/New()
// This exists so that world.Profile() is THE FIRST PROC TO RUN in the init sequence.
// This allows us to get the real details of everything lagging at server start.
// world.Profile(PROFILE_START)
#if defined(ENABLE_BYOND_TRACY)
var/tracy_init = LIBCALL("prof.dll", "init")() // Setup Tracy integration
if(tracy_init != "0")
CRASH("Tracy init error: [tracy_init]")
#endif
// After that, the debugger is initialized.
// Doing it this early makes it possible to set breakpoints in the New()
// of things assigned to global variables or objects included in a compiled map file.
// world.enable_auxtools_debugger()
GLOBAL_REAL(super_early_init, /datum/super_early_init) = new
-4
View File
@@ -266,7 +266,6 @@ var/list/gamemode_cache = list()
var/static/radiation_material_resistance_divisor = 1
var/static/radiation_lower_limit = 0.35 //If the radiation level for a turf would be below this, ignore it.
var/static/random_submap_orientation = FALSE // If true, submaps loaded automatically can be rotated.
var/static/autostart_solars = FALSE // If true, specifically mapped in solar control computers will set themselves up when the round starts.
// New shiny SQLite stuff.
@@ -943,9 +942,6 @@ var/list/gamemode_cache = list()
if("ipr_minimum_age")
config.ipr_minimum_age = text2num(value)
if("random_submap_orientation")
config.random_submap_orientation = 1
if("autostart_solars")
config.autostart_solars = TRUE
+7 -2
View File
@@ -5,7 +5,6 @@ SUBSYSTEM_DEF(mapping)
flags = SS_NO_FIRE
var/list/map_templates = list()
var/dmm_suite/maploader = null
var/obj/effect/landmark/engine_loader/engine_loader
var/list/shelter_templates = list()
@@ -17,7 +16,6 @@ SUBSYSTEM_DEF(mapping)
if(subsystem_initialized)
return
world.max_z_changed() // This is to set up the player z-level list, maxz hasn't actually changed (probably)
maploader = new()
load_map_templates()
if(CONFIG_GET(flag/generate_map))
@@ -173,3 +171,10 @@ SUBSYSTEM_DEF(mapping)
if (!Debug2)
return // Only show up in stat panel if debugging is enabled.
. = ..()
// VOREStation Edit: BAPI-dmm
/datum/controller/subsystem/mapping/Shutdown()
// Force bapi to drop it's cached maps on server shutdown.
_bapidmm_clear_map_data()
fdel("data/baked_dmm_files/")
// VOREStation Edit End
+7
View File
@@ -1,5 +1,7 @@
// Areas.dm
GLOBAL_LIST_EMPTY(areas_by_type)
/area
var/fire = null
var/atmos = 1
@@ -55,6 +57,11 @@
var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons.
var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within.
/area/New()
// Used by the maploader, this must be done in New, not init
GLOB.areas_by_type[type] = src
return ..()
/area/Initialize()
. = ..()
luminosity = !(dynamic_lighting)
+2 -2
View File
@@ -62,8 +62,8 @@
// During dynamic mapload (reader.dm) this assigns the var overrides from the .dmm file
// Native BYOND maploading sets those vars before invoking New(), by doing this FIRST we come as close to that behavior as we can.
if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
GLOB._preloader.load(src)
if(GLOB.use_preloader && (src.type == GLOB._preloader_path))//in case the instanciated atom is creating other atoms in New()
world.preloader_load(src)
// Pass our arguments to InitAtom so they can be passed to initialize(), but replace 1st with if-we're-during-mapload.
var/do_initialize = SSatoms.initialized
-14
View File
@@ -1,19 +1,5 @@
/proc/prof_init()
var/lib
switch(world.system_type)
if(MS_WINDOWS) lib = "prof.dll"
if(UNIX) lib = "libprof.so"
else CRASH("unsupported platform")
var/init = LIBCALL(lib, "init")()
if("0" != init) CRASH("[lib] init error: [init]")
#define RECOMMENDED_VERSION 513
/world/New()
#ifdef TRACY
prof_init()
#endif
world_startup_time = world.timeofday
rollover_safety_date = world.realtime - world.timeofday // 00:00 today (ish, since floating point error with world.realtime) of today
to_world_log("Map Loading Complete")
@@ -10,20 +10,13 @@
return
template = SSmapping.map_templates[map]
var/orientation = text2dir(tgui_input_list(usr, "Choose an orientation for this Map Template.", "Orientation", list("North", "South", "East", "West")))
if(!orientation)
return
// Convert dir to degrees rotation
orientation = dir2angle(orientation)
var/turf/T = get_turf(mob)
if(!T)
return
var/list/preview = list()
template.preload_size(template.mappath, orientation)
for(var/S in template.get_affected_turfs(T,centered = TRUE, orientation=orientation))
template.preload_size(template.mappath)
for(var/S in template.get_affected_turfs(T,centered = TRUE))
preview += image('icons/misc/debug_group.dmi',S ,"red")
usr.client.images += preview
if(tgui_alert(usr,"Confirm location.", "Template Confirm",list("No","Yes")) == "Yes")
@@ -31,7 +24,7 @@
usr.client.images -= preview
return
if(template.load(T, centered = TRUE, orientation=orientation))
if(template.load(T, centered = TRUE))
message_admins(span_adminnotice("[key_name_admin(usr)] has placed a map template ([template.name])."))
else
to_chat(usr, "Failed to place map")
@@ -49,20 +42,13 @@
return
template = SSmapping.map_templates[map]
var/orientation = text2dir(tgui_input_list(usr, "Choose an orientation for this Map Template.", "Orientation", list("North", "South", "East", "West")))
if(!orientation)
return
// Convert dir to degrees rotation
orientation = dir2angle(orientation)
if((!(orientation%180) && template.width > world.maxx || template.height > world.maxy) || (orientation%180 && template.width > world.maxy || template.height > world.maxx))
if(tgui_alert(usr,"This template is larger than the existing z-levels. It will EXPAND ALL Z-LEVELS to match the size of the template. This may cause chaos. Are you sure you want to do this?","DANGER!!!",list("Cancel","Yes")) != "Yes")
if(template.width > world.maxx || template.height > world.maxx)
if(tgui_alert(usr,"This template is larger than the existing z-levels. It will EXPAND ALL Z-LEVELS to match the size of the template. This may cause chaos. Are you sure you want to do this?","DANGER!!!",list("Cancel","Yes")) == "Cancel")
to_chat(usr,"Template placement aborted.")
return
if(tgui_alert(usr,"Confirm map load.", "Template Confirm",list("No","Yes")) == "Yes")
if(template.load_new_z(orientation=orientation))
if(template.load_new_z())
message_admins(span_adminnotice("[key_name_admin(usr)] has placed a map template ([template.name]) on Z level [world.maxz]."))
else
to_chat(usr, "Failed to place map")
@@ -0,0 +1,36 @@
//THIS FILE IS AUTOMATICALLY GENERATED BY BAPI_DMM_READER, PLEASE DO NOT TOUCH IT
//PROC DEFINITIONS MAY MOVE AROUND, THIS IS NORMAL
/* This comment bypasses grep checks */ /var/__bapi_dmm_reader
/proc/__detect_bapi_dmm_reader()
if (world.system_type == UNIX)
if(fexists("./libbapi_dmm_reader.so"))
// No need for LD_LIBRARY_PATH badness.
return __bapi_dmm_reader = "./libbapi_dmm_reader.so"
// It's not in the current directory, so try others
return __bapi_dmm_reader = "libbapi_dmm_reader"
else
return __bapi_dmm_reader = "bapi_dmm_reader"
#define BAPI_DMM_READER (__bapi_dmm_reader || __detect_bapi_dmm_reader())
/proc/_bapidmm_test_connection()
return call_ext(BAPI_DMM_READER, "byond:_bapidmm_test_connection_ffi")()
/proc/_bapidmm_parse_map_blocking(dmm_file, map_datum)
return call_ext(BAPI_DMM_READER, "byond:_bapidmm_parse_map_blocking_ffi")(dmm_file, map_datum)
/proc/_bapidmm_load_map_buffered(parsed_map, x_offset, y_offset, z_offset, crop_map, no_changeturf, x_lower,
x_upper, y_lower, y_upper, z_lower, z_upper, place_on_top, new_z)
return call_ext(BAPI_DMM_READER, "byond:_bapidmm_load_map_buffered_ffi")(parsed_map, x_offset, y_offset, z_offset, crop_map, no_changeturf, x_lower,
x_upper, y_lower, y_upper, z_lower, z_upper, place_on_top, new_z)
/proc/_bapidmm_work_commandbuffer(parsed_map, resume_key)
return call_ext(BAPI_DMM_READER, "byond:_bapidmm_work_commandbuffer_ffi")(parsed_map, resume_key)
/proc/_bapidmm_clear_map_data()
return call_ext(BAPI_DMM_READER, "byond:_bapidmm_clear_map_data_ffi")()
/proc/bapidmm_generate_automata(limit_x, limit_y, iterations, initial_wall_cell)
return call_ext(BAPI_DMM_READER, "byond:bapidmm_generate_automata_ffi")(limit_x, limit_y, iterations, initial_wall_cell)
@@ -0,0 +1,274 @@
// This file provides manually written utility types and such for the BAPI DMM Reader
GLOBAL_LIST_EMPTY(cached_maps)
GLOBAL_VAR_INIT(use_preloader, FALSE)
GLOBAL_VAR_INIT(_preloader_path, null)
GLOBAL_LIST_EMPTY(_preloader_attributes)
/world/proc/preloader_setup(list/the_attributes, path)
if(LAZYLEN(the_attributes))
GLOB.use_preloader = TRUE
GLOB._preloader_attributes = the_attributes
GLOB._preloader_path = path
/world/proc/preloader_load(atom/what)
GLOB.use_preloader = FALSE
var/list/attributes = GLOB._preloader_attributes
for(var/attribute in attributes)
var/value = attributes[attribute]
if(islist(value))
value = deepCopyList(value)
#ifdef TESTING
if(what.vars[attribute] == value)
var/message = "<font color=green>[what.type]</font> at [AREACOORD(what)] - <b>VAR:</b> <font color=red>[attribute] = [isnull(value) ? "null" : (isnum(value) ? value : "\"[value]\"")]</font>"
world.log << "DIRTY VAR: [message]"
dirty_vars += message
#endif
what.vars[attribute] = value
#define MAP_DMM "dmm"
/**
* TGM SPEC:
* TGM is a derevation of DMM, with restrictions placed on it
* to make it easier to parse and to reduce merge conflicts/ease their resolution
*
* Requirements:
* Each "statement" in a key's details ends with a new line, and wrapped in (...)
* All paths end with either a comma or occasionally a {, then a new line
* Excepting the area, who is listed last and ends with a ) to mark the end of the key
*
* {} denotes a list of variable edits applied to the path that came before the first {
* the final } is followed by a comma, and then a new line
* Variable edits have the form \tname = value;\n
* Except the last edit, which has no final ;, and just ends in a newline
* No extra padding is permitted
* Many values are supported. See parse_constant()
* Strings must be wrapped in "...", files in '...', and lists in list(...)
* Files are kinda susy, and may not actually work. buyer beware
* Lists support assoc values as expected
* These constants can be further embedded into lists
*
* There can be no padding in front of, or behind a path
*
* Therefore:
* "key" = (
* /path,
* /other/path{
* var = list("name" = 'filepath');
* other_var = /path
* },
* /turf,
* /area)
*
*/
#define MAP_TGM "tgm"
#define MAP_UNKNOWN "unknown"
/// Returned from parse_map to give some metadata about the map
/datum/bapi_parsed_map
var/_internal_index = -1
var/original_path = ""
var/map_format = MAP_UNKNOWN
var/key_len = 0
var/line_len = 0
var/expanded_y = FALSE
var/expanded_x = FALSE
/// Unoffset bounds. Null on parse failure.
var/list/bounds = list()
/// Offset bounds. Same as parsed_bounds until load().
var/list/parsed_bounds = list()
///any turf in this list is skipped inside of build_coordinate. Lazy assoc list
var/list/turf_blacklist
var/loading = FALSE
var/loaded_warnings = list()
/**
* Helper and recommened way to load a map file
* - dmm_file: The path to the map file
* - x_offset: The x offset to load the map at
* - y_offset: The y offset to load the map at
* - z_offset: The z offset to load the map at
* - crop_map: If true, the map will be cropped to the world bounds
* - measure_only: If true, the map will not be loaded, but the bounds will be calculated
* - no_changeturf: If true, the map will not call /turf/AfterChange
* - x_lower: The minimum x coordinate to load
* - x_upper: The maximum x coordinate to load
* - y_lower: The minimum y coordinate to load
* - y_upper: The maximum y coordinate to load
* - z_lower: The minimum z coordinate to load
* - z_upper: The maximum z coordinate to load
* - place_on_top: Whether to use /turf/proc/PlaceOnTop rather than /turf/proc/ChangeTurf
* - new_z: If true, a new z level will be created for the map
*/
/proc/load_map_bapi(
dmm_file,
x_offset = 1,
y_offset = 1,
z_offset,
crop_map = FALSE,
measure_only = FALSE,
no_changeturf = FALSE,
x_lower = -INFINITY,
x_upper = INFINITY,
y_lower = -INFINITY,
y_upper = INFINITY,
z_lower = -INFINITY,
z_upper = INFINITY,
place_on_top = FALSE,
new_z = FALSE,
)
if(isfile(dmm_file))
log_debug("bapi-dmm was passed a file instead of a path string: [dmm_file]")
var/name = sanitize_filename("[dmm_file]")
var/path = "data/baked_dmm_files/[name]"
if(!fexists(path))
var/text = file2text(dmm_file)
rustg_file_write(text, path)
dmm_file = path
if(!fexists(dmm_file))
stack_trace("Invalid map path: [dmm_file]")
return
if(!(dmm_file in GLOB.cached_maps))
GLOB.cached_maps[dmm_file] = new /datum/bapi_parsed_map(dmm_file)
// Bay assumption
if(!z_offset)
z_offset = world.maxz + 1
var/datum/bapi_parsed_map/parsed_map = GLOB.cached_maps[dmm_file]
parsed_map = parsed_map.copy()
if(!measure_only && !isnull(parsed_map.bounds))
parsed_map.load(x_offset, y_offset, z_offset, crop_map, no_changeturf, x_lower, x_upper, y_lower, y_upper, z_lower, z_upper, place_on_top, new_z)
return parsed_map
/datum/bapi_parsed_map/New(tfile)
if(isnull(tfile))
return // create a new datum without loading a map
var/ret = _bapidmm_parse_map_blocking(tfile, src)
if(!ret)
CRASH("Failed to load map [tfile], check rust_log.txt")
/datum/bapi_parsed_map/Destroy()
..()
SSatoms.map_loader_stop(REF(src)) // Just in case, I don't want to double up here
if(turf_blacklist)
turf_blacklist.Cut()
parsed_bounds.Cut()
bounds.Cut()
return QDEL_HINT_HARDDEL_NOW
/datum/bapi_parsed_map/proc/copy()
// Avoids duped work just in case
var/datum/bapi_parsed_map/newfriend = new()
// use the same under-the-hood data
newfriend._internal_index = _internal_index
newfriend.original_path = original_path
newfriend.map_format = map_format
newfriend.key_len = key_len
newfriend.line_len = line_len
newfriend.parsed_bounds = parsed_bounds.Copy()
// Copy parsed bounds to reset to initial values
newfriend.bounds = parsed_bounds.Copy()
newfriend.turf_blacklist = turf_blacklist?.Copy()
// Explicitly do NOT copy `loaded` and `loaded_warnings`
return newfriend
/datum/bapi_parsed_map/proc/load(
x_offset = 1,
y_offset = 1,
z_offset = 1,
crop_map = FALSE,
no_changeturf = FALSE,
x_lower = -INFINITY,
x_upper = INFINITY,
y_lower = -INFINITY,
y_upper = INFINITY,
z_lower = -INFINITY,
z_upper = INFINITY,
place_on_top = FALSE,
new_z = FALSE,
)
Master.StartLoadingMap()
. = _load_impl(x_offset, y_offset, z_offset, crop_map, no_changeturf, x_lower, x_upper, y_lower, y_upper, z_lower, z_upper, place_on_top, new_z)
Master.StopLoadingMap()
/datum/bapi_parsed_map/proc/_load_impl(
x_offset = 1,
y_offset = 1,
z_offset = 1,
crop_map = FALSE,
no_changeturf = FALSE,
x_lower = -INFINITY,
x_upper = INFINITY,
y_lower = -INFINITY,
y_upper = INFINITY,
z_lower = -INFINITY,
z_upper = INFINITY,
place_on_top = FALSE,
new_z = FALSE,
)
PRIVATE_PROC(TRUE)
SSatoms.map_loader_begin(REF(src))
// `loading` var handled by bapidmm
var/resume_key = _bapidmm_load_map_buffered(
src,
x_offset,
y_offset,
z_offset,
crop_map,
no_changeturf,
x_lower,
x_upper,
y_lower,
y_upper,
z_lower,
z_upper,
place_on_top,
new_z
)
if(!resume_key)
SSatoms.map_loader_stop(REF(src))
CRASH("Failed to generate command buffer, check rust_log.txt and other runtimes")
var/work_remaining = FALSE
do
work_remaining = _bapidmm_work_commandbuffer(src, resume_key)
stoplag()
while(work_remaining)
SSatoms.map_loader_stop(REF(src))
// if(new_z)
// for(var/z_index in bounds[MAP_MINZ] to bounds[MAP_MAXZ])
// SSmapping.build_area_turfs(z_index)
// if(!no_changeturf)
// var/list/turfs = block(
// locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]),
// locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))
// for(var/turf/T as anything in turfs)
// //we do this after we load everything in. if we don't, we'll have weird atmos bugs regarding atmos adjacent turfs
// T.AfterChange(CHANGETURF_IGNORE_AIR)
// if(expanded_x || expanded_y)
// SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EXPANDED_WORLD_BOUNDS, expanded_x, expanded_y)
return TRUE
/datum/bapi_parsed_map/proc/has_warnings()
if(length(loaded_warnings))
return TRUE
return FALSE
// #undef MAP_DMM
// #undef MAP_TGM
// #undef MAP_UNKNOWN
+110
View File
@@ -0,0 +1,110 @@
// Internal bapi-dmm helpers
/datum/bapi_parsed_map/proc/_bapi_add_warning(warning)
loaded_warnings += list(warning)
/datum/bapi_parsed_map/proc/_bapi_expand_map(x, y, z, new_z, z_offset)
if(x > world.maxx)
expanded_x = TRUE
world.maxx = x
// if(new_z)
// world.increase_max_x(x, map_load_z_cutoff = z_offset - 1)
// else
// world.increase_max_x(x)
if(y > world.maxy)
expanded_y = TRUE
world.maxy = y
// if(new_z)
// world.increase_max_y(y, map_load_z_cutoff = z_offset - 1)
// else
// world.increase_max_y(y)
if(z > world.maxz)
while(world.maxz < z)
world.increment_max_z()
/proc/_bapi_helper_get_world_bounds()
. = list(world.maxx, world.maxy, world.maxz)
/proc/_bapi_helper_text2path(text)
. = text2path(text)
/proc/_bapi_helper_text2file(text)
. = file(text)
/proc/_bapi_create_atom(path, crds)
set waitfor = FALSE
. = new path (crds)
/proc/_bapi_setup_preloader(list/attributes, path)
world.preloader_setup(attributes, path)
/proc/_bapi_apply_preloader(atom/A)
if(GLOB.use_preloader)
world.preloader_load(A)
/proc/_bapi_new_atom(text_path, turf/crds, list/attributes)
var/path = text2path(text_path)
if(!path)
CRASH("Bad atom path [text_path]")
if(attributes != null)
world.preloader_setup(attributes, path)
var/atom/instance = _bapi_create_atom(path, crds) // first preloader pass
if(GLOB.use_preloader && instance) // second preloader pass for atoms that don't ..() in New()
world.preloader_load(instance)
/proc/_bapi_create_or_get_area(text_path)
var/path = text2path(text_path)
if(!path)
CRASH("Bad area path [text_path]")
var/area/area_instance = GLOB.areas_by_type[path]
if(!area_instance)
area_instance = new path(null)
if(!area_instance)
CRASH("[path] failed to be new'd, what'd you do?")
return area_instance
/proc/_bapi_handle_area_contain(turf/T, area/A)
// var/area/old_area = T.loc
// if(old_area == A)
// return // no changing areas that already contain this turf, it'll confuse them
// LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, T.z, list())
// LISTASSERTLEN(A.turfs_by_zlevel, T.z, list())
// old_area.turfs_to_uncontain_by_zlevel[T.z] += T
// A.turfs_by_zlevel[T.z] += T
/proc/_bapi_create_turf(turf/crds, text_path, list/attributes, place_on_top, no_changeturf)
var/path = text2path(text_path)
if(!path)
CRASH("Bad turf path [text_path]")
if(attributes != null)
world.preloader_setup(attributes, path)
var/atom/instance
if(no_changeturf)
instance = _bapi_create_atom(path, crds)
else
instance = crds.ChangeTurf(path, FALSE, TRUE)
if(GLOB.use_preloader && instance) // second preloader pass for atoms that don't ..() in New()
world.preloader_load(instance)
/proc/_bapi_add_turf_to_area(area/A, turf/T)
if(!A || !T)
return
A.contents.Add(T)
/proc/_bapi_helper_get_world_type_turf()
return "[world.turf]"
/proc/_bapi_helper_get_world_type_area()
return "[world.area]"
/// Implement this to have bapi-dmm sleep occasionally
/// by returning true
/proc/_bapi_helper_tick_check()
return TICK_CHECK
-73
View File
@@ -1,73 +0,0 @@
var/global/dmm_suite/maploader = null
dmm_suite{
/*
dmm_suite version 1.0
Released January 30th, 2011.
defines the object /dmm_suite
- Provides the proc load_map()
- Loads the specified map file onto the specified z-level.
- provides the proc write_map()
- Returns a text string of the map in dmm format
ready for output to a file.
- provides the proc save_map()
- Returns a .dmm file if map is saved
- Returns FALSE if map fails to save
The dmm_suite provides saving and loading of map files in BYOND's native DMM map
format. It approximates the map saving and loading processes of the Dream Maker
and Dream Seeker programs so as to allow editing, saving, and loading of maps at
runtime.
------------------------
To save a map at runtime, create an instance of /dmm_suite, and then call
write_map(), which accepts three arguments:
- A turf representing one corner of a three dimensional grid (Required).
- Another turf representing the other corner of the same grid (Required).
- Any, or a combination, of several bit flags (Optional, see documentation).
The order in which the turfs are supplied does not matter, the /dmm_writer will
determine the grid containing both, in much the same way as DM's block() function.
write_map() will then return a string representing the saved map in dmm format;
this string can then be saved to a file, or used for any other purose.
------------------------
To load a map at runtime, create an instance of /dmm_suite, and then call load_map(),
which accepts two arguments:
- A .dmm file to load (Required).
- A number representing the z-level on which to start loading the map (Optional).
The /dmm_suite will load the map file starting on the specified z-level. If no
z-level was specified, world.maxz will be increased so as to fit the map. Note
that if you wish to load a map onto a z-level that already has objects on it,
you will have to handle the removal of those objects. Otherwise the new map will
simply load the new objects on top of the old ones.
Also note that all type paths specified in the .dmm file must exist in the world's
code, and that the /dmm_reader trusts that files to be loaded are in fact valid
.dmm files. Errors in the .dmm format will cause runtime errors.
*/
verb/load_map(var/dmm_file as file, var/z_offset as num)
// dmm_file: A .dmm file to load (Required).
// z_offset: A number representing the z-level on which to start loading the map (Optional).
verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){
// t1: A turf representing one corner of a three dimensional grid (Required).
// t2: Another turf representing the other corner of the same grid (Required).
// flags: Any, or a combination, of several bit flags (Optional, see documentation).
}
// save_map is included as a legacy proc. Use write_map instead.
verb/save_map(var/turf/t1 as turf, var/turf/t2 as turf, var/map_name as text, var/flags as num){
// t1: A turf representing one corner of a three dimensional grid (Required).
// t2: Another turf representing the other corner of the same grid (Required).
// map_name: A valid name for the map to be saved, such as "castle" (Required).
// flags: Any, or a combination, of several bit flags (Optional, see documentation).
}
}
-237
View File
@@ -1,237 +0,0 @@
/*
DMP to swapmap converter
version 1.0
by Lummox JR
*/
/mob/verb/Convert(filename as file)
dmp2swapmap(filename)
/proc/d2sm_prepmap(filename)
var/txt = file2text(filename)
if(!txt) return
var/i,j
i=findText(txt,ascii2text(13)) // eliminate carriage returns
while(i)
txt=copytext(txt,1,i)+copytext(txt,i+1)
i=findText(txt,ascii2text(13),i)
i=findText(txt,"\\\n")
while(i)
for(j=i+2,j<=length(txt),++j) if(text2ascii(txt,j)>32) break
txt=copytext(txt,1,i)+copytext(txt,j)
i=findText(txt,"\\\n",i)
return txt
/proc/dmp2swapmap(filename)
//var/txt = file2text(filename)
//if(!txt) return
var/txt = d2sm_prepmap(filename)
var/mapname="[filename]"
var/i,j,k
i=findtext(mapname,".dmp")
while(i && i+4<length(mapname)) i=findtext(mapname,".dmp",i+1)
mapname=copytext(mapname,1,i)
/* i=findText(txt,ascii2text(13))
while(i)
txt=copytext(txt,1,i)+copytext(txt,i+1)
i=findText(txt,ascii2text(13),i)
i=findText(txt,"\\\n")
while(i)
for(j=i+2,j<=length(txt),++j) if(text2ascii(txt,j)>32) break
txt=copytext(txt,1,i)+copytext(txt,j)
i=findText(txt,"\\\n",i) */
var/list/codes=new
var/codelen=1
var/list/areas
var/mode=34
var/z=0
var/X=0,Y=0,Z=0
while(txt)
if(text2ascii(txt)==34)
if(mode!=34)
to_world("Corrupt map file [filename]: Unexpected code found after z-level [z]")
return
// standard line:
// "a" = (/obj, /obj, /turf, /area)
i=findtext(txt,"\"",2)
var/code=copytext(txt,2,i)
codelen=length(code)
i=findtext(txt,"(",i)
if(!i)
to_world("Corrupt map file [filename]: No type list follows \"[code]\"")
return
k=findtext(txt,"\n",++i)
j=(k || length(txt+1))
while(--j>=i && text2ascii(txt,j)!=41)
if(j<i)
to_world("Corrupt map file [filename]: Type list following \"[code]\" is incomplete")
return
var/list/L = d2sm_ParseCommaList(copytext(txt,i,j))
if(istext(L))
to_world("Corrupt map file [filename]: [L]")
return
if(L.len<2)
to_world("Corrupt map file [filename]: Type list following \"[code]\" has only 1 item")
return
txt=k?copytext(txt,k+1):null
if(L[L.len] == "[world.area]") L[L.len]=0
else
if(!areas) areas=list()
i=areas.Find(L[L.len])
if(i) L[L.len]=i
else
areas+=L[L.len]
L[L.len]=areas.len
var/codetrans=d2sm_ConvertType(L[L.len-1],"\t\t\t\t")
if(L[L.len]) codetrans+="\t\t\t\tAREA = [L[L.len]]\n"
if(L.len>2) codetrans+=d2sm_Contents(L,L.len-2,"\t\t\t\t")
codes[code]=copytext(codetrans,1,length(codetrans))
else if(text2ascii(txt)==40)
mode=40
// standard line (top-down, left-right symbol order):
// (1,1,1) = {"
// abcde
// bcdef
// "}
i=d2sm_MatchBrace(txt,1,40)
if(!i)
to_world("Corrupt map file [filename]: No matching ) for coordinates: [copytext(txt,1,findtext(txt,"\n"))]")
return
var/list/coords=d2sm_ParseCommaList(copytext(txt,2,i))
if(istext(coords) || coords.len!=3)
to_world("Corrupt map file [filename]: [istext(coords)?(coords):"[copytext(txt,1,i+1)] is not a valid (x,y,z) coordinate"]")
return
j=findtext(txt,"{",i+1)
if(!j)
to_world("Corrupt map file [filename]: No braces {} following [copytext(txt,1,i+1)]")
return
k=d2sm_MatchBrace(txt,j,123)
if(!k)
to_world("Corrupt map file [filename]: No closing brace } following [copytext(txt,1,i+1)]")
return
var/mtxt=copytext(txt,j+1,k)
if(findText(mtxt,"\"\n")!=1 || !findText(mtxt,"\n\"",length(mtxt)-1))
to_world(findText(mtxt,"\"\n"))
to_world(findText(mtxt,"\n\"",length(mtxt)-1))
to_world("Corrupt map file [filename]: No quotes in braces following [copytext(txt,1,i+1)]")
return
mtxt=copytext(mtxt,2,length(mtxt))
var/_x=0,_y=0
for(i=1,,++_y)
j=findText(mtxt,"\n",i+1)
if(!j) break
_x=max(_x,(j-i-1)/codelen)
i=j
X=max(X,_x)
Y=max(Y,_y)
z=text2num(coords[3])
Z=max(Z,z)
txt=copytext(txt,k+1)
else
i=findtext(txt,"\n")
txt=i?copytext(txt,i+1):null
to_world("Map size: [X],[Y],[Z]")
//for(var/code in codes)
// to_world("Code \"[code]\":\n[codes[code]]")
fdel("map_[mapname].txt")
var/F = file("map_[mapname].txt")
to_chat(F, ". = object(\".0\")\n.0\n\ttype = /swapmap\n\tid = \"[mapname]\"\n\tz = [Z]\n\ty = [Y]\n\tx = [X]")
if(areas)
txt=""
for(i=0,i<areas.len,++i)
txt+="[i?", ":""]object(\".[i]\")"
to_chat(F, "\tareas = list([txt])")
for(i=0,i<areas.len,++i)
to_chat(F, "\t\t.[i]")
txt=d2sm_ConvertType(areas[i+1],"\t\t\t")
to_chat(F,copytext(txt,1,length(txt)))
// 2nd pass
txt=d2sm_prepmap(filename)
while(txt)
// skip all non-data sections
if(text2ascii(txt)!=40)
i=findText(txt,"\n")
if(i) txt=copytext(txt,i+1)
else txt=null
continue
i=d2sm_MatchBrace(txt,1,40)
var/list/coords=d2sm_ParseCommaList(copytext(txt,2,i))
j=findtext(txt,"{",i+1)
k=d2sm_MatchBrace(txt,j,123)
var/mtxt=copytext(txt,j+2,k-1)
var/_x=0,_y=0
for(i=1,,++_y)
j=findText(mtxt,"\n",i+1)
if(!j) break
_x=max(_x,(j-i-1)/codelen)
i=j
// print out this z-level now
to_chat(F, "\t[coords[3]]")
i=1
for(var/y=_y,y>0,--y) // map is top-down
++i
to_chat(F, "\t\t[y]")
for(var/x in 1 to _x)
to_chat(F, "\t\t\t[x]")
j=i+codelen
to_chat(F, codes[copytext(mtxt,i,j)])
i=j
txt=copytext(txt,k+1)
/* for(z in 1 to Z)
to_chat(F, "\t[z]")
for(var/y in 1 to Y)
to_chat(F, "\t\t[y]")
for(var/x in 1 to X)
to_chat(F, "\t\t\t[x]")
to_chat(F, codes[pick(codes)]) */
/proc/d2sm_ParseCommaList(txt)
var/list/L=new
var/i,ch
for(i=1,i<=length(txt),++i)
if(text2ascii(txt,i)>32) break
for(,i<=length(txt),++i)
ch=text2ascii(txt,i)
if(ch==44)
L+=copytext(txt,1,i)
for(++i,i<=length(txt),++i) if(text2ascii(txt,i)>32) break
txt=copytext(txt,i)
i=0;continue
if(ch==40 || ch==91 || ch==123)
i=d2sm_MatchBrace(txt,i,ch)
if(!i) return "No matching brace found for [ascii2text(ch)]"
if(i>1) L+=copytext(txt,1,i)
return L
/proc/d2sm_MatchBrace(txt, i, which)
if(which==40) ++which
else which+=2
var/j,ch
for(j=i+1,j<=length(txt),++j)
ch=text2ascii(txt,j)
if(ch==which) return j
if(ch==40 || ch==91 || ch==123)
j=d2sm_MatchBrace(txt,j,ch)
if(!j) return 0
/proc/d2sm_ConvertType(tt,tabs="")
var/i=findText(tt,"{")
if(!i) return "[tabs]type = [tt]\n"
.="[tabs]type = [copytext(tt,1,i)]\n"
var/list/L=d2sm_ParseCommaList(copytext(tt,i+1,d2sm_MatchBrace(tt,i,123)))
if(istext(L)) return
for(var/pair in L)
.="[.][tabs][pair]\n"
/proc/d2sm_Contents(list/conts,n,tabs="")
.="[tabs]contents = list("
var/i
for(i=0,i<n,++i)
.+="[i?", ":""]object(\".[i]\")"
.+=")\n"
tabs+="\t"
for(i=0,i<n,++i)
.+="[tabs].[i]\n"
.+=d2sm_ConvertType(conts[i+1],tabs+"\t")
-332
View File
@@ -1,332 +0,0 @@
///////////////////////////////////////////////////////////////
//SS13 Optimized Map loader
//////////////////////////////////////////////////////////////
//global datum that will preload variables on atoms instanciation
var/global/dmm_suite/preloader/_preloader = null
/**
* Construct the model map and control the loading process
*
* WORKING :
*
* 1) Makes an associative mapping of model_keys with model
* e.g aa = /turf/unsimulated/wall{icon_state = "rock"}
* 2) Read the map line by line, parsing the result (using parse_grid)
*
*/
/dmm_suite/load_map(var/dmm_file as file, var/z_offset as num)
if(!z_offset)//what z_level we are creating the map on
z_offset = world.maxz+1
var/quote = ascii2text(34)
var/tfile = file2text(dmm_file)//the map file we're creating
var/tfile_len = length(tfile)
var/lpos = 1 // the models definition index
///////////////////////////////////////////////////////////////////////////////////////
//first let's map model keys (e.g "aa") to their contents (e.g /turf/space{variables})
///////////////////////////////////////////////////////////////////////////////////////
var/list/grid_models = list()
var/key_len = length(copytext(tfile,2,findtext(tfile,quote,2,0)))//the length of the model key (e.g "aa" or "aba")
//proceed line by line
for(lpos=1; lpos<tfile_len; lpos=findtext(tfile,"\n",lpos,0)+1)
var/tline = copytext(tfile,lpos,findtext(tfile,"\n",lpos,0))
if(copytext(tline,1,2) != quote)//we reached the map "layout"
break
var/model_key = copytext(tline,2,2+key_len)
var/model_contents = copytext(tline,findtext(tfile,"=")+3,length(tline))
grid_models[model_key] = model_contents
sleep(-1)
///////////////////////////////////////////////////////////////////////////////////////
//now let's fill the map with turf and objects using the constructed model map
///////////////////////////////////////////////////////////////////////////////////////
//position of the currently processed square
var/zcrd=-1
var/ycrd=0
var/xcrd=0
for(var/zpos=findtext(tfile,"\n(1,1,",lpos,0);zpos!=0;zpos=findtext(tfile,"\n(1,1,",zpos+1,0)) //in case there's several maps to load
zcrd++
world.maxz = max(world.maxz, zcrd+z_offset)//create a new z_level if needed
var/zgrid = copytext(tfile,findtext(tfile,quote+"\n",zpos,0)+2,findtext(tfile,"\n"+quote,zpos,0)+1) //copy the whole map grid
var/z_depth = length(zgrid)
//if exceeding the world max x or y, increase it
var/x_depth = length(copytext(zgrid,1,findtext(zgrid,"\n",2,0)))
if(world.maxx<x_depth)
world.maxx=x_depth
var/y_depth = z_depth / (x_depth+1)//x_depth + 1 because we're counting the '\n' characters in z_depth
if(world.maxy<y_depth)
world.maxy=y_depth
//then proceed it line by line, starting from top
ycrd = y_depth
for(var/gpos=1;gpos!=0;gpos=findtext(zgrid,"\n",gpos,0)+1)
var/grid_line = copytext(zgrid,gpos,findtext(zgrid,"\n",gpos,0))
//fill the current square using the model map
xcrd=0
for(var/mpos=1;mpos<=x_depth;mpos+=key_len)
xcrd++
var/model_key = copytext(grid_line,mpos,mpos+key_len)
parse_grid(grid_models[model_key],xcrd,ycrd,zcrd+z_offset)
//reached end of current map
if(gpos+x_depth+1>z_depth)
break
ycrd--
sleep(-1)
//reached End Of File
if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len)
break
sleep(-1)
/**
* Fill a given tile with its area/turf/objects/mobs
* Variable model is one full map line (e.g /turf/unsimulated/wall{icon_state = "rock"},/area/mine/explored)
*
* WORKING :
*
* 1) Read the model string, member by member (delimiter is ',')
*
* 2) Get the path of the atom and store it into a list
*
* 3) a) Check if the member has variables (text within '{' and '}')
*
* 3) b) Construct an associative list with found variables, if any (the atom index in members is the same as its variables in members_attributes)
*
* 4) Instanciates the atom with its variables
*
*/
/dmm_suite/proc/parse_grid(var/model as text,var/xcrd as num,var/ycrd as num,var/zcrd as num)
/*Method parse_grid()
- Accepts a text string containing a comma separated list of type paths of the
same construction as those contained in a .dmm file, and instantiates them.
*/
var/list/members = list()//will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored)
var/list/members_attributes = list()//will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list())
/////////////////////////////////////////////////////////
//Constructing members and corresponding variables lists
////////////////////////////////////////////////////////
var/index=1
var/old_position = 1
var/dpos
do
//finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored)
dpos= find_next_delimiter_position(model,old_position,",","{","}")//find next delimiter (comma here) that's not within {...}
var/full_def = copytext(model,old_position,dpos)//full definition, e.g : /obj/foo/bar{variables=derp}
var/atom_def = text2path(copytext(full_def,1,findtext(full_def,"{")))//path definition, e.g /obj/foo/bar
members.Add(atom_def)
old_position = dpos + 1
//transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7))
var/list/fields = list()
var/variables_start = findtext(full_def,"{")
if(variables_start)//if there's any variable
full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}'
fields = text2list(full_def,";")
//then fill the members_attributes list with the corresponding variables
members_attributes.len++
members_attributes[index++] = fields
sleep(-1)
while(dpos != 0)
////////////////
//Instanciation
////////////////
//The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile
//in case of multiples turfs on one tile,
//will contains the images of all underlying turfs, to simulate the DMM multiple tiles piling
var/list/turfs_underlays = list()
//first instance the /area and remove it from the members list
index = members.len
var/atom/instance
_preloader = new(members_attributes[index])//preloader for assigning set variables on atom creation
instance = locate(members[index])
instance.contents.Add(locate(xcrd,ycrd,zcrd))
if(_preloader && instance)
_preloader.load(instance)
members.Remove(members[index])
//then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect
var/first_turf_index = 1
while(!ispath(members[first_turf_index],/turf)) //find first /turf object in members
first_turf_index++
//instanciate the first /turf
var/turf/T = instance_atom(members[first_turf_index],members_attributes[first_turf_index],xcrd,ycrd,zcrd)
//if others /turf are presents, simulates the underlays piling effect
index = first_turf_index + 1
while(index <= members.len)
turfs_underlays.Insert(1,image(T.icon,null,T.icon_state,T.layer,T.dir))//add the current turf image to the underlays list
var/turf/UT = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf
add_underlying_turf(UT,T,turfs_underlays)//simulates the DMM piling effect
T = UT
index++
//finally instance all remainings objects/mobs
for(index=1,index < first_turf_index,index++)
instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)
////////////////
//Helpers procs
////////////////
//Instance an atom at (x,y,z) and gives it the variables in attributes
/dmm_suite/proc/instance_atom(var/path,var/list/attributes, var/x, var/y, var/z)
var/atom/instance
_preloader = new(attributes, path)
instance = new path (locate(x,y,z))//first preloader pass
if(_preloader && instance)//second preloader pass, for those atoms that don't ..() in New()
_preloader.load(instance)
return instance
//text trimming (both directions) helper proc
//optionally removes quotes before and after the text (for variable name)
/dmm_suite/proc/trim_text(var/what as text,var/trim_quotes=0)
while(length(what) && (findtext(what," ",1,2)))
what=copytext(what,2,0)
while(length(what) && (findtext(what," ",length(what),0)))
what=copytext(what,1,length(what))
if(trim_quotes)
while(length(what) && (findtext(what,quote,1,2)))
what=copytext(what,2,0)
while(length(what) && (findtext(what,quote,length(what),0)))
what=copytext(what,1,length(what))
return what
//find the position of the next delimiter,skipping whatever is comprised between opening_escape and closing_escape
//returns 0 if reached the last delimiter
/dmm_suite/proc/find_next_delimiter_position(var/text as text,var/initial_position as num, var/delimiter=",",var/opening_escape=quote,var/closing_escape=quote)
var/position = initial_position
var/next_delimiter = findtext(text,delimiter,position,0)
var/next_opening = findtext(text,opening_escape,position,0)
while((next_opening != 0) && (next_opening < next_delimiter))
position = findtext(text,closing_escape,next_opening + 1,0)+1
next_delimiter = findtext(text,delimiter,position,0)
next_opening = findtext(text,opening_escape,position,0)
return next_delimiter
//build a list from variables in text form (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7))
//return the filled list
/dmm_suite/proc/text2list(var/text as text,var/delimiter=",")
var/list/to_return = list()
var/position
var/old_position = 1
do
//find next delimiter that is not within "..."
position = find_next_delimiter_position(text,old_position,delimiter)
//check if this is a simple variable (as in list(var1, var2)) or an associative one (as in list(var1="foo",var2=7))
var/equal_position = findtext(text,"=",old_position, position)
var/trim_left = trim_text(copytext(text,old_position,(equal_position ? equal_position : position)),1)//the name of the variable, must trim quotes to build a BYOND compliant associatives list
old_position = position + 1
if(equal_position)//associative var, so do the association
var/trim_right = trim_text(copytext(text,equal_position+1,position))//the content of the variable
//Check for string
if(findtext(trim_right,quote,1,2))
trim_right = copytext(trim_right,2,findtext(trim_right,quote,3,0))
//Check for number
else if(isnum(text2num(trim_right)))
trim_right = text2num(trim_right)
//Check for null
else if(trim_right == "null")
trim_right = null
//Check for list
else if(copytext(trim_right,1,5) == "list")
trim_right = text2list(copytext(trim_right,6,length(trim_right)))
//Check for file
else if(copytext(trim_right,1,2) == "'")
trim_right = file(copytext(trim_right,2,length(trim_right)))
to_return[trim_left] = trim_right
else//simple var
to_return[trim_left] = null
while(position != 0)
return to_return
//simulates the DM multiple turfs on one tile underlaying
/dmm_suite/proc/add_underlying_turf(var/turf/placed,var/turf/underturf, var/list/turfs_underlays)
if(underturf.density)
placed.density = TRUE
if(underturf.opacity)
placed.opacity = 1
placed.underlays += turfs_underlays
//atom creation method that preloads variables at creation
/atom/New()
if(_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
_preloader.load(src)
. = ..()
//////////////////
//Preloader datum
//////////////////
/dmm_suite/preloader
parent_type = /datum
var/list/attributes
var/target_path
/dmm_suite/preloader/New(var/list/the_attributes, var/path)
.=..()
if(!the_attributes.len)
Del()
return
attributes = the_attributes
target_path = path
/dmm_suite/preloader/proc/load(atom/what)
for(var/attribute in attributes)
what.vars[attribute] = attributes[attribute]
Del()
-678
View File
@@ -1,678 +0,0 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/*
SwapMaps library by Lummox JR
developed for digitalBYOND
http://www.digitalbyond.org
Version 2.1
The purpose of this library is to make it easy for authors to swap maps
in and out of their game using savefiles. Swapped-out maps can be
transferred between worlds for an MMORPG, sent to the client, etc.
This is facilitated by the use of a special datum and a global list.
Uses of swapmaps:
- Temporary battle arenas
- House interiors
- Individual custom player houses
- Virtually unlimited terrain
- Sharing maps between servers running different instances of the same
game
- Loading and saving pieces of maps for reusable room templates
*/
/*
User Interface:
VARS:
swapmaps_iconcache
An associative list of icon files with names, like
'player.dmi' = "player"
swapmaps_mode
This must be set at runtime, like in world/New().
SWAPMAPS_SAV 0 (default)
Uses .sav files for raw /savefile output.
SWAPMAPS_TEXT 1
Uses .txt files via ExportText() and ImportText(). These maps
are easily editable and appear to take up less space in the
current version of BYOND.
PROCS:
SwapMaps_Find(id)
Find a map by its id
SwapMaps_Load(id)
Load a map by its id
SwapMaps_Save(id)
Save a map by its id (calls swapmap.Save())
SwapMaps_Unload(id)
Save and unload a map by its id (calls swapmap.Unload())
SwapMaps_Save_All()
Save all maps
SwapMaps_DeleteFile(id)
Delete a map file
SwapMaps_CreateFromTemplate(id)
Create a new map by loading another map to use as a template.
This map has id==src and will not be saved. To make it savable,
change id with swapmap.SetID(newid).
SwapMaps_LoadChunk(id,turf/locorner)
Load a swapmap as a "chunk", at a specific place. A new datum is
created but it's not added to the list of maps to save or unload.
The new datum can be safely deleted without affecting the turfs
it loaded. The purpose of this is to load a map file onto part of
another swapmap or an existing part of the world.
locorner is the corner turf with the lowest x,y,z values.
SwapMaps_SaveChunk(id,turf/corner1,turf/corner2)
Save a piece of the world as a "chunk". A new datum is created
for the chunk, but it can be deleted without destroying any turfs.
The chunk file can be reloaded as a swapmap all its own, or loaded
via SwapMaps_LoadChunk() to become part of another map.
SwapMaps_GetSize(id)
Return a list corresponding to the x,y,z sizes of a map file,
without loading the map.
Returns null if the map is not found.
SwapMaps_AddIconToCache(name,icon)
Cache an icon file by name for space-saving storage
swapmap.New(id,x,y,z)
Create a new map; specify id, width (x), height (y), and
depth (z)
Default size is world.maxx,world.maxy,1
swapmap.New(id,turf1,turf2)
Create a new map; specify id and 2 corners
This becomes a /swapmap for one of the compiled-in maps, for
easy saving.
swapmap.New()
Create a new map datum, but does not allocate space or assign an
ID (used for loading).
swapmap.Del()
Deletes a map but does not save
swapmap.Save()
Saves to map_[id].sav
Maps with id==src are not saved.
swapmap.Unload()
Saves the map and then deletes it
Maps with id==src are not saved.
swapmap.SetID(id)
Change the map's id and make changes to the lookup list
swapmap.AllTurfs(z)
Returns a block of turfs encompassing the entire map, or on just
one z-level
z is in world coordinates; it is optional
swapmap.Contains(turf/T)
Returns nonzero if T is inside the map's boundaries.
Also works for objs and mobs, but the proc is not area-safe.
swapmap.InUse()
Returns nonzero if a mob with a key is within the map's
boundaries.
swapmap.LoCorner(z=z1)
Returns locate(x1,y1,z), where z=z1 if none is specified.
swapmap.HiCorner(z=z2)
Returns locate(x2,y2,z), where z=z2 if none is specified.
swapmap.BuildFilledRectangle(turf/corner1,turf/corner2,item)
Builds a filled rectangle of item from one corner turf to the
other, on multiple z-levels if necessary. The corners may be
specified in any order.
item is a type path like /turf/wall or /obj/barrel{full=1}.
swapmap.BuildRectangle(turf/corner1,turf/corner2,item)
Builds an unfilled rectangle of item from one corner turf to
the other, on multiple z-levels if necessary.
swapmap.BuildInTurfs(list/turfs,item)
Builds item on all of the turfs listed. The list need not
contain only turfs, or even only atoms.
*/
swapmap
var/id // a string identifying this map uniquely
var/x1 // minimum x,y,z coords
var/y1
var/z1
var/x2 // maximum x,y,z coords (also used as width,height,depth until positioned)
var/y2
var/z2
var/tmp/locked // don't move anyone to this map; it's saving or loading
var/tmp/mode // save as text-mode
var/ischunk // tells the load routine to load to the specified location
New(_id,x,y,z)
if(isnull(_id)) return
id=_id
mode=swapmaps_mode
if(isturf(x) && isturf(y))
/*
Special format: Defines a map as an existing set of turfs;
this is useful for saving a compiled map in swapmap format.
Because this is a compiled-in map, its turfs are not deleted
when the datum is deleted.
*/
x1=min(x:x,y:x);x2=max(x:x,y:x)
y1=min(x:y,y:y);y2=max(x:y,y:y)
z1=min(x:z,y:z);z2=max(x:z,y:z)
InitializeSwapMaps()
if(z2>swapmaps_compiled_maxz ||\
y2>swapmaps_compiled_maxy ||\
x2>swapmaps_compiled_maxx)
qdel(src)
return
x2=x?(x):world.maxx
y2=y?(y):world.maxy
z2=z?(z):1
AllocateSwapMap()
Del()
// a temporary datum for a chunk can be deleted outright
// for others, some cleanup is necessary
if(!ischunk)
swapmaps_loaded-=src
swapmaps_byname-=id
if(z2>swapmaps_compiled_maxz ||\
y2>swapmaps_compiled_maxy ||\
x2>swapmaps_compiled_maxx)
var/list/areas=new
for(var/atom/A in block(locate(x1,y1,z1),locate(x2,y2,z2)))
for(var/obj/O in A) qdel(O)
for(var/mob/M in A)
if(!M.key) qdel(M)
else M.loc=null
areas[A.loc]=null
qdel(A)
// delete areas that belong only to this map
for(var/area/a in areas)
if(a && !a.contents.len) qdel(a)
if(x2>=world.maxx || y2>=world.maxy || z2>=world.maxz) CutXYZ()
qdel(areas)
..()
/*
Savefile format:
map
id
x // size, not coords
y
z
areas // list of areas, not including default
[each z; 1 to depth]
[each y; 1 to height]
[each x; 1 to width]
type // of turf
AREA // if non-default; saved as a number (index into areas list)
vars // all other changed vars
*/
Write(savefile/S)
var/x
var/y
var/z
var/n
var/list/areas
var/area/defarea=locate(world.area)
if(!defarea) defarea=new world.area
areas=list()
for(var/turf/T in block(locate(x1,y1,z1),locate(x2,y2,z2)))
areas[T.loc]=null
for(n in areas) // quickly eliminate associations for smaller storage
areas-=n
areas+=n
areas-=defarea
InitializeSwapMaps()
locked=1
S["id"] << id
S["z"] << z2-z1+1
S["y"] << y2-y1+1
S["x"] << x2-x1+1
S["areas"] << areas
for(n in 1 to areas.len) areas[areas[n]]=n
var/oldcd=S.cd
for(z=z1,z<=z2,++z)
S.cd="[z-z1+1]"
for(y=y1,y<=y2,++y)
S.cd="[y-y1+1]"
for(x=x1,x<=x2,++x)
S.cd="[x-x1+1]"
var/turf/T=locate(x,y,z)
S["type"] << T.type
if(T.loc!=defarea) S["AREA"] << areas[T.loc]
T.Write(S)
S.cd=".."
S.cd=".."
sleep()
S.cd=oldcd
locked=0
qdel(areas)
Read(savefile/S,_id,turf/locorner)
var/x
var/y
var/z
var/n
var/list/areas
var/area/defarea=locate(world.area)
id=_id
if(locorner)
ischunk=1
x1=locorner.x
y1=locorner.y
z1=locorner.z
if(!defarea) defarea=new world.area
if(!_id)
S["id"] >> id
else
var/dummy
S["id"] >> dummy
S["z"] >> z2 // these are depth,
S["y"] >> y2 // height,
S["x"] >> x2 // width
S["areas"] >> areas
locked=1
AllocateSwapMap() // adjust x1,y1,z1 - x2,y2,z2 coords
var/oldcd=S.cd
for(z=z1,z<=z2,++z)
S.cd="[z-z1+1]"
for(y=y1,y<=y2,++y)
S.cd="[y-y1+1]"
for(x=x1,x<=x2,++x)
S.cd="[x-x1+1]"
var/tp
S["type"]>>tp
var/turf/T=locate(x,y,z)
T.loc.contents-=T
T=new tp(locate(x,y,z))
if("AREA" in S.dir)
S["AREA"]>>n
var/area/A=areas[n]
A.contents+=T
else defarea.contents+=T
// clear the turf
for(var/obj/O in T) qdel(O)
for(var/mob/M in T)
if(!M.key) qdel(M)
else M.loc=null
// finish the read
T.Read(S)
S.cd=".."
S.cd=".."
sleep()
S.cd=oldcd
locked=0
qdel(areas)
/*
Find an empty block on the world map in which to load this map.
If no space is found, increase world.maxz as necessary. (If the
map is greater in x,y size than the current world, expand
world.maxx and world.maxy too.)
Ignore certain operations if loading a map as a chunk. Use the
x1,y1,z1 position for it, and *don't* count it as a loaded map.
*/
proc/AllocateSwapMap()
InitializeSwapMaps()
world.maxx=max(x2,world.maxx) // stretch x/y if necessary
world.maxy=max(y2,world.maxy)
if(!ischunk)
if(world.maxz<=swapmaps_compiled_maxz)
z1=swapmaps_compiled_maxz+1
x1=1;y1=1
else
var/list/l=ConsiderRegion(1,1,world.maxx,world.maxy,swapmaps_compiled_maxz+1)
x1=l[1]
y1=l[2]
z1=l[3]
qdel(l)
x2+=x1-1
y2+=y1-1
z2+=z1-1
world.maxz=max(z2,world.maxz) // stretch z if necessary
if(!ischunk)
swapmaps_loaded[src]=null
swapmaps_byname[id]=src
proc/ConsiderRegion(X1,Y1,X2,Y2,Z1,Z2)
while(1)
var/nextz=0
var/swapmap/M
for(M in swapmaps_loaded)
if(M.z2<Z1 || (Z2 && M.z1>Z2) || M.z1>=Z1+z2 ||\
M.x1>X2 || M.x2<X1 || M.x1>=X1+x2 ||\
M.y1>Y2 || M.y2<Y1 || M.y1>=Y1+y2) continue
// look for sub-regions with a defined ceiling
var/nz2=Z2?(Z2):Z1+z2-1+M.z2-M.z1
if(M.x1>=X1+x2)
.=ConsiderRegion(X1,Y1,M.x1-1,Y2,Z1,nz2)
if(.) return
else if(M.x2<=X2-x2)
.=ConsiderRegion(M.x2+1,Y1,X2,Y2,Z1,nz2)
if(.) return
if(M.y1>=Y1+y2)
.=ConsiderRegion(X1,Y1,X2,M.y1-1,Z1,nz2)
if(.) return
else if(M.y2<=Y2-y2)
.=ConsiderRegion(X1,M.y2+1,X2,Y2,Z1,nz2)
if(.) return
nextz=nextz?min(nextz,M.z2+1):(M.z2+1)
if(!M)
/* If nextz is not 0, then at some point there was an overlap that
could not be resolved by using an area to the side */
if(nextz) Z1=nextz
if(!nextz || (Z2 && Z2-Z1+1<z2))
return (!Z2 || Z2-Z1+1>=z2)?list(X1,Y1,Z1):null
X1=1;X2=world.maxx
Y1=1;Y2=world.maxy
proc/CutXYZ()
var/mx=swapmaps_compiled_maxx
var/my=swapmaps_compiled_maxy
var/mz=swapmaps_compiled_maxz
for(var/swapmap/M in swapmaps_loaded) // may not include src
mx=max(mx,M.x2)
my=max(my,M.y2)
mz=max(mz,M.z2)
world.maxx=mx
world.maxy=my
world.maxz=mz
// save and delete
proc/Unload()
Save()
qdel(src)
proc/Save()
if(id==src) return 0
var/savefile/S=mode?(new):new("map_[id].sav")
S << src
while(locked) sleep(1)
if(mode)
fdel("map_[id].txt")
S.ExportText("/","map_[id].txt")
return 1
// this will not delete existing savefiles for this map
proc/SetID(newid)
swapmaps_byname-=id
id=newid
swapmaps_byname[id]=src
proc/AllTurfs(z)
if(isnum(z) && (z<z1 || z>z2)) return null
return block(LoCorner(z),HiCorner(z))
// this could be safely called for an obj or mob as well, but
// probably not an area
proc/Contains(turf/T)
return (T && T.x>=x1 && T.x<=x2\
&& T.y>=y1 && T.y<=y2\
&& T.z>=z1 && T.z<=z2)
proc/InUse()
for(var/turf/T in AllTurfs())
for(var/mob/M in T) if(M.key) return 1
proc/LoCorner(z=z1)
return locate(x1,y1,z)
proc/HiCorner(z=z2)
return locate(x2,y2,z)
/*
Build procs: Take 2 turfs as corners, plus an item type.
An item may be like:
turf/wall
obj/fence{icon_state="iron"}
*/
proc/BuildFilledRectangle(turf/T1,turf/T2,item)
if(!Contains(T1) || !Contains(T2)) return
var/turf/T=T1
// pick new corners in a block()-friendly form
T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z))
T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z))
for(T in block(T1,T2)) new item(T)
proc/BuildRectangle(turf/T1,turf/T2,item)
if(!Contains(T1) || !Contains(T2)) return
var/turf/T=T1
// pick new corners in a block()-friendly form
T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z))
T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z))
if(T2.x-T1.x<2 || T2.y-T1.y<2) BuildFilledRectangle(T1,T2,item)
else
//for(T in block(T1,T2)-block(locate(T1.x+1,T1.y+1,T1.z),locate(T2.x-1,T2.y-1,T2.z)))
for(T in block(T1,locate(T2.x,T1.y,T2.z))) new item(T)
for(T in block(locate(T1.x,T2.y,T1.z),T2)) new item(T)
for(T in block(locate(T1.x,T1.y+1,T1.z),locate(T1.x,T2.y-1,T2.z))) new item(T)
for(T in block(locate(T2.x,T1.y+1,T1.z),locate(T2.x,T2.y-1,T2.z))) new item(T)
/*
Supplementary build proc: Takes a list of turfs, plus an item
type. Actually the list doesn't have to be just turfs.
*/
proc/BuildInTurfs(list/turfs,item)
for(var/T in turfs) new item(T)
atom
Write(savefile/S)
for(var/V in vars-"x"-"y"-"z"-"contents"-"icon"-"overlays"-"underlays")
if(issaved(vars[V]))
if(vars[V]!=initial(vars[V])) S[V]<<vars[V]
else S.dir.Remove(V)
if(icon!=initial(icon))
if(swapmaps_iconcache && swapmaps_iconcache[icon])
S["icon"]<<swapmaps_iconcache[icon]
else S["icon"]<<icon
// do not save mobs with keys; do save other mobs
var/mob/M
for(M in src) if(M.key) break
if(overlays.len) S["overlays"]<<overlays
if(underlays.len) S["underlays"]<<underlays
if(contents.len && !isarea(src))
var/list/l=contents
if(M)
l=l.Copy()
for(M in src) if(M.key) l-=M
if(l.len) S["contents"]<<l
if(l!=contents) qdel(l)
Read(savefile/S)
var/list/l
if(contents.len) l=contents
..()
// if the icon was a text string, it would not have loaded properly
// replace it from the cache list
if(!icon && ("icon" in S.dir))
var/ic
S["icon"]>>ic
if(istext(ic)) icon=swapmaps_iconcache[ic]
if(l && contents!=l)
contents+=l
qdel(l)
// set this up (at runtime) as follows:
// list(\
// 'player.dmi'="player",\
// 'monster.dmi'="monster",\
// ...
// 'item.dmi'="item")
var/list/swapmaps_iconcache
// preferred mode; sav or text
var/const/SWAPMAPS_SAV=0
var/const/SWAPMAPS_TEXT=1
var/swapmaps_mode=SWAPMAPS_SAV
var/swapmaps_compiled_maxx
var/swapmaps_compiled_maxy
var/swapmaps_compiled_maxz
var/swapmaps_initialized
var/swapmaps_loaded
var/swapmaps_byname
/proc/InitializeSwapMaps()
if(swapmaps_initialized) return
swapmaps_initialized=1
swapmaps_compiled_maxx=world.maxx
swapmaps_compiled_maxy=world.maxy
swapmaps_compiled_maxz=world.maxz
swapmaps_loaded=list()
swapmaps_byname=list()
if(swapmaps_iconcache)
for(var/V in swapmaps_iconcache)
// reverse-associate everything
// so you can look up an icon file by name or vice-versa
swapmaps_iconcache[swapmaps_iconcache[V]]=V
/proc/SwapMaps_AddIconToCache(name,icon)
if(!swapmaps_iconcache) swapmaps_iconcache=list()
swapmaps_iconcache[name]=icon
swapmaps_iconcache[icon]=name
/proc/SwapMaps_Find(id)
InitializeSwapMaps()
return swapmaps_byname[id]
/proc/SwapMaps_Load(id)
InitializeSwapMaps()
var/swapmap/M=swapmaps_byname[id]
if(!M)
var/savefile/S
var/text=0
if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt"))
text=1
else if(fexists("map_[id].sav"))
S=new("map_[id].sav")
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt"))
text=1
else return // no file found
if(text)
S=new
S.ImportText("/",file("map_[id].txt"))
S >> M
while(M.locked) sleep(1)
M.mode=text
return M
/proc/SwapMaps_Save(id)
InitializeSwapMaps()
var/swapmap/M=swapmaps_byname[id]
if(M) M.Save()
return M
/proc/SwapMaps_Save_All()
InitializeSwapMaps()
for(var/swapmap/M in swapmaps_loaded)
if(M) M.Save()
/proc/SwapMaps_Unload(id)
InitializeSwapMaps()
var/swapmap/M=swapmaps_byname[id]
if(!M) return // return silently from an error
M.Unload()
return 1
/proc/SwapMaps_DeleteFile(id)
fdel("map_[id].sav")
fdel("map_[id].txt")
/proc/SwapMaps_CreateFromTemplate(template_id)
var/swapmap/M=new
var/savefile/S
var/text=0
if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[template_id].txt"))
text=1
else if(fexists("map_[template_id].sav"))
S=new("map_[template_id].sav")
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[template_id].txt"))
text=1
else
to_world_log("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.")
return
if(text)
S=new
S.ImportText("/",file("map_[template_id].txt"))
/*
This hacky workaround is needed because S >> M will create a brand new
M to fill with data. There's no way to control the Read() process
properly otherwise. The //.0 path should always match the map, however.
*/
S.cd="//.0"
M.Read(S,M)
M.mode=text
while(M.locked) sleep(1)
return M
/proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
var/swapmap/M=new
var/savefile/S
var/text=0
if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[chunk_id].txt"))
text=1
else if(fexists("map_[chunk_id].sav"))
S=new("map_[chunk_id].sav")
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[chunk_id].txt"))
text=1
else
to_world_log("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.")
return
if(text)
S=new
S.ImportText("/",file("map_[chunk_id].txt"))
/*
This hacky workaround is needed because S >> M will create a brand new
M to fill with data. There's no way to control the Read() process
properly otherwise. The //.0 path should always match the map, however.
*/
S.cd="//.0"
M.Read(S,M,locorner)
while(M.locked) sleep(1)
qdel(M)
return 1
/proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2)
if(!corner1 || !corner2)
to_world_log("SwapMaps error in SwapMaps_SaveChunk():")
if(!corner1) to_world_log(" corner1 turf is null")
if(!corner2) to_world_log(" corner2 turf is null")
return
var/swapmap/M=new
M.id=chunk_id
M.ischunk=1 // this is a chunk
M.x1=min(corner1.x,corner2.x)
M.y1=min(corner1.y,corner2.y)
M.z1=min(corner1.z,corner2.z)
M.x2=max(corner1.x,corner2.x)
M.y2=max(corner1.y,corner2.y)
M.z2=max(corner1.z,corner2.z)
M.mode=swapmaps_mode
M.Save()
while(M.locked) sleep(1)
qdel(M)
return 1
/proc/SwapMaps_GetSize(id)
var/savefile/S
var/text=0
if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt"))
text=1
else if(fexists("map_[id].sav"))
S=new("map_[id].sav")
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt"))
text=1
else
to_world_log("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.")
return
if(text)
S=new
S.ImportText("/",file("map_[id].txt"))
/*
The //.0 path should always be the map. There's no other way to
read this data.
*/
S.cd="//.0"
var/x
var/y
var/z
S["x"] >> x
S["y"] >> y
S["z"] >> z
return list(x,y,z)
-63
View File
@@ -1,63 +0,0 @@
/dmm_suite{
/*
dmm_suite version 1.0
Released January 30th, 2011.
NOTE: Map saving functionality removed
defines the object /dmm_suite
- Provides the proc load_map()
- Loads the specified map file onto the specified z-level.
- provides the proc write_map()
- Returns a text string of the map in dmm format
ready for output to a file.
- provides the proc save_map()
- Returns a .dmm file if map is saved
- Returns FALSE if map fails to save
The dmm_suite provides saving and loading of map files in BYOND's native DMM map
format. It approximates the map saving and loading processes of the Dream Maker
and Dream Seeker programs so as to allow editing, saving, and loading of maps at
runtime.
------------------------
To save a map at runtime, create an instance of /dmm_suite, and then call
write_map(), which accepts three arguments:
- A turf representing one corner of a three dimensional grid (Required).
- Another turf representing the other corner of the same grid (Required).
- Any, or a combination, of several bit flags (Optional, see documentation).
The order in which the turfs are supplied does not matter, the /dmm_writer will
determine the grid containing both, in much the same way as DM's block() function.
write_map() will then return a string representing the saved map in dmm format;
this string can then be saved to a file, or used for any other purose.
------------------------
To load a map at runtime, create an instance of /dmm_suite, and then call load_map(),
which accepts two arguments:
- A .dmm file to load (Required).
- A number representing the z-level on which to start loading the map (Optional).
The /dmm_suite will load the map file starting on the specified z-level. If no
z-level was specified, world.maxz will be increased so as to fit the map. Note
that if you wish to load a map onto a z-level that already has objects on it,
you will have to handle the removal of those objects. Otherwise the new map will
simply load the new objects on top of the old ones.
Also note that all type paths specified in the .dmm file must exist in the world's
code, and that the /dmm_reader trusts that files to be loaded are in fact valid
.dmm files. Errors in the .dmm format will cause runtime errors.
*/
}
/dmm_suite/verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num, var/measureOnly as num, no_changeturf as num){
// dmm_file: A .dmm file to load (Required).
// z_offset: A number representing the z-level on which to start loading the map (Optional).
// cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional).
// measureOnly: When true, no changes will be made to the world (Optional).
// no_changeturf: When true, turf/AfterChange won't be called on loaded turfs
}
+32 -33
View File
@@ -7,7 +7,6 @@
var/mappath = null
var/loaded = 0 // Times loaded this round
var/annihilate = FALSE // If true, all (movable) atoms at the location where the map is loaded will be deleted before the map is loaded in.
var/fixed_orientation = FALSE // If true, the submap will not be rotated randomly when loaded.
var/cost = null /* The map generator has a set 'budget' it spends to place down different submaps. It will pick available submaps randomly until
it runs out. The cost of a submap should roughly corrispond with several factors such as size, loot, difficulty, desired scarcity, etc.
@@ -24,15 +23,12 @@
if(rename)
name = rename
/datum/map_template/proc/preload_size(path, orientation = 0)
var/bounds = SSmapping.maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE, orientation=orientation)
/datum/map_template/proc/preload_size(path)
var/datum/bapi_parsed_map/map = load_map_bapi(path, 1, 1, 1, crop_map=FALSE, measure_only=TRUE)
var/list/bounds = map.parsed_bounds
if(bounds)
if(orientation & (90 | 270))
width = bounds[MAP_MAXY]
height = bounds[MAP_MAXX]
else
width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1
height = bounds[MAP_MAXY]
width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1
height = bounds[MAP_MAXY]
return bounds
/datum/map_template/proc/initTemplateBounds(var/list/bounds)
@@ -80,7 +76,7 @@
admin_notice(span_danger("Submap initializations finished."), R_DEBUG)
/datum/map_template/proc/load_new_z(var/centered = FALSE, var/orientation = 0)
/datum/map_template/proc/load_new_z(var/centered = FALSE)
var/x = 1
var/y = 1
@@ -88,7 +84,8 @@
x = round((world.maxx - width)/2)
y = round((world.maxy - height)/2)
var/list/bounds = SSmapping.maploader.load_map(file(mappath), x, y, no_changeturf = TRUE, orientation=orientation)
var/datum/bapi_parsed_map/map = load_map_bapi(mappath, x, y, no_changeturf = TRUE)
var/list/bounds = map.bounds
if(!bounds)
return FALSE
@@ -100,10 +97,10 @@
on_map_loaded(world.maxz) //VOREStation Edit
return TRUE
/datum/map_template/proc/load(turf/T, centered = FALSE, orientation = 0)
/datum/map_template/proc/load(turf/T, centered = FALSE)
var/old_T = T
if(centered)
T = locate(T.x - round(((orientation%180) ? height : width)/2) , T.y - round(((orientation%180) ? width : height)/2) , T.z) // %180 catches East/West (90,270) rotations on true, North/South (0,180) rotations on false
T = locate(T.x - round((width)/2) , T.y - round((height)/2) , T.z) // %180 catches East/West (90,270) rotations on true, North/South (0,180) rotations on false
if(!T)
return
if(T.x+width > world.maxx)
@@ -112,9 +109,10 @@
return
if(annihilate)
annihilate_bounds(old_T, centered, orientation)
annihilate_bounds(old_T, centered)
var/list/bounds = SSmapping.maploader.load_map(file(mappath), T.x, T.y, T.z, cropMap=TRUE, orientation = orientation)
var/datum/bapi_parsed_map/map = load_map_bapi(mappath, T.x, T.y, T.z, crop_map = TRUE)
var/list/bounds = map.bounds
if(!bounds)
return
@@ -128,18 +126,18 @@
loaded++
return TRUE
/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE, orientation = 0)
/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE)
var/turf/placement = T
if(centered)
var/turf/corner = locate(placement.x - round(((orientation%180) ? height : width)/2), placement.y - round(((orientation%180) ? width : height)/2), placement.z) // %180 catches East/West (90,270) rotations on true, North/South (0,180) rotations on false
var/turf/corner = locate(placement.x - round((width)/2), placement.y - round((height)/2), placement.z) // %180 catches East/West (90,270) rotations on true, North/South (0,180) rotations on false
if(corner)
placement = corner
return block(placement, locate(placement.x+((orientation%180) ? height : width)-1, placement.y+((orientation%180) ? width : height)-1, placement.z))
return block(placement, locate(placement.x+(width)-1, placement.y+(height)-1, placement.z))
/datum/map_template/proc/annihilate_bounds(turf/origin, centered = FALSE, orientation = 0)
/datum/map_template/proc/annihilate_bounds(turf/origin, centered = FALSE)
var/deleted_atoms = 0
admin_notice(span_danger("Annihilating objects in submap loading locatation."), R_DEBUG)
var/list/turfs_to_clean = get_affected_turfs(origin, centered, orientation)
var/list/turfs_to_clean = get_affected_turfs(origin, centered)
if(turfs_to_clean.len)
for(var/turf/T in turfs_to_clean)
for(var/atom/movable/AM in T)
@@ -150,9 +148,9 @@
//for your ever biggening badminnery kevinz000
//❤ - Cyberboss
/proc/load_new_z_level(var/file, var/name, var/orientation = 0)
/proc/load_new_z_level(var/file, var/name)
var/datum/map_template/template = new(file, name)
template.load_new_z(orientation)
template.load_new_z()
// Very similar to the /tg/ version.
/proc/seed_submaps(var/list/z_levels, var/budget = 0, var/whitelist = /area/space, var/desired_map_template_type = null)
@@ -231,20 +229,14 @@
while(specific_sanity > 0)
specific_sanity--
var/orientation
if(chosen_template.fixed_orientation || !CONFIG_GET(flag/random_submap_orientation))
orientation = 0
else
orientation = pick(list(0, 90, 180, 270))
chosen_template.preload_size(chosen_template.mappath, orientation)
var/width_border = SUBMAP_MAP_EDGE_PAD + round(((orientation%180) ? chosen_template.height : chosen_template.width) / 2) // %180 catches East/West (90,270) rotations on true, North/South (0,180) rotations on false //VOREStation Edit
var/height_border = SUBMAP_MAP_EDGE_PAD + round(((orientation%180) ? chosen_template.width : chosen_template.height) / 2) //VOREStation Edit
chosen_template.preload_size(chosen_template.mappath)
var/width_border = SUBMAP_MAP_EDGE_PAD + round((chosen_template.width) / 2)
var/height_border = SUBMAP_MAP_EDGE_PAD + round((chosen_template.height) / 2) //VOREStation Edit
var/z_level = pick(z_levels)
var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level)
var/valid = TRUE
for(var/turf/check in chosen_template.get_affected_turfs(T,TRUE,orientation))
for(var/turf/check in chosen_template.get_affected_turfs(T,TRUE))
var/area/new_area = get_area(check)
if(!(istype(new_area, whitelist)))
valid = FALSE // Probably overlapping something important.
@@ -267,7 +259,7 @@
specific_sanity = -1 // force end the placement loop
// Do loading here.
chosen_template.load(T, centered = TRUE, orientation=orientation) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead.
chosen_template.load(T, centered = TRUE) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead.
CHECK_TICK
@@ -306,3 +298,10 @@
else
admin_notice("Submaps loaded.", R_DEBUG)
admin_notice("Loaded: [english_list(pretty_submap_list)]", R_DEBUG)
/area/template_noop
name = "Area Passthrough"
/turf/template_noop
name = "Turf Passthrough"
icon_state = "template_void"
-549
View File
@@ -1,549 +0,0 @@
///////////////////////////////////////////////////////////////
//SS13 Optimized Map loader
//////////////////////////////////////////////////////////////
//global datum that will preload variables on atoms instanciation
GLOBAL_VAR_INIT(use_preloader, FALSE)
GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
/dmm_suite
// /"([a-zA-Z]+)" = \(((?:.|\n)*?)\)\n(?!\t)|\((\d+),(\d+),(\d+)\) = \{"([a-zA-Z\n]*)"\}/g
var/static/regex/dmmRegex = new/regex({""(\[a-zA-Z]+)" = \\(((?:.|\n)*?)\\)\n(?!\t)|\\((\\d+),(\\d+),(\\d+)\\) = \\{"(\[a-zA-Z\n]*)"\\}"}, "g")
// /^[\s\n]+"?|"?[\s\n]+$|^"|"$/g
var/static/regex/trimQuotesRegex = new/regex({"^\[\\s\n]+"?|"?\[\\s\n]+$|^"|"$"}, "g")
// /^[\s\n]+|[\s\n]+$/
var/static/regex/trimRegex = new/regex("^\[\\s\n]+|\[\\s\n]+$", "g")
var/static/list/modelCache = list()
var/static/space_key
#ifdef TESTING
var/static/turfsSkipped
#endif
/**
* Construct the model map and control the loading process
*
* WORKING :
*
* 1) Makes an associative mapping of model_keys with model
* e.g aa = /turf/unsimulated/wall{icon_state = "rock"}
* 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, orientation as num)
dmmRegex = new/regex({""(\[a-zA-Z]+)" = \\(((?:.|\n)*?)\\)\n(?!\t)|\\((\\d+),(\\d+),(\\d+)\\) = \\{"(\[a-zA-Z\n]*)"\\}"}, "g")
trimQuotesRegex = new/regex({"^\[\\s\n]+"?|"?\[\\s\n]+$|^"|"$"}, "g")
trimRegex = new/regex("^\[\\s\n]+|\[\\s\n]+$", "g")
modelCache = list()
//How I wish for RAII
if(!measureOnly)
Master.StartLoadingMap()
space_key = null
#ifdef TESTING
turfsSkipped = 0
#endif
. = load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, orientation)
#ifdef TESTING
if(turfsSkipped)
testing("Skipped loading [turfsSkipped] default turfs")
#endif
if(!measureOnly)
Master.StopLoadingMap()
/dmm_suite/proc/load_map_impl(dmm_file, x_offset, y_offset, z_offset, cropMap, measureOnly, no_changeturf, orientation)
var/tfile = dmm_file//the map file we're creating
if(isfile(tfile))
tfile = file2text(tfile)
if(!x_offset)
x_offset = 1
if(!y_offset)
y_offset = 1
if(!z_offset)
z_offset = world.maxz + 1
// If it's not a single dir, default to 0 degrees rotation (Default orientation)
if(!(orientation in list(0, 90, 180, 270)))
orientation = 0
var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF)
var/list/grid_models = list()
var/key_len = 0
var/stored_index = 1
while(dmmRegex.Find(tfile, stored_index))
stored_index = dmmRegex.next
// "aa" = (/type{vars=blah})
if(dmmRegex.group[1]) // Model
var/key = dmmRegex.group[1]
if(grid_models[key]) // Duplicate model keys are ignored in DMMs
continue
if(key_len != length(key))
if(!key_len)
key_len = length(key)
else
throw EXCEPTION("Inconsistant key length in DMM")
if(!measureOnly)
grid_models[key] = dmmRegex.group[2]
// (1,1,1) = {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}
else if(dmmRegex.group[3]) // Coords
if(!key_len)
throw EXCEPTION("Coords before model definition in DMM")
var/xcrdStart = text2num(dmmRegex.group[3]) + x_offset - 1
//position of the currently processed square
var/xcrd
var/ycrd = text2num(dmmRegex.group[4]) + y_offset - 1
var/zcrd = text2num(dmmRegex.group[5]) + z_offset - 1
if(orientation & (EAST | WEST)) //VOREStation edit we just have to pray the upstream spacebrains take into consideration before their refator is done.
xcrd = ycrd // temp variable
ycrd = xcrdStart
xcrdStart = xcrd
var/zexpansion = zcrd > world.maxz
if(zexpansion && !measureOnly)
if(cropMap)
continue
else
while(world.maxz < zcrd)
world.increment_max_z() // create a new z_level if needed.
if(!no_changeturf)
WARNING("Z-level expansion occurred without no_changeturf set, this may cause problems")
bounds[MAP_MINX] = min(bounds[MAP_MINX], xcrdStart)
bounds[MAP_MINZ] = min(bounds[MAP_MINZ], zcrd)
bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], zcrd)
var/list/gridLines = splittext(dmmRegex.group[6], "\n")
var/leadingBlanks = 0
while(leadingBlanks < gridLines.len && gridLines[++leadingBlanks] == "")
if(leadingBlanks > 1)
gridLines.Cut(1, leadingBlanks) // Remove all leading blank lines.
if(!gridLines.len) // Skip it if only blank lines exist.
continue
if(gridLines.len && gridLines[gridLines.len] == "")
gridLines.Cut(gridLines.len) // Remove only one blank line at the end.
bounds[MAP_MINY] = min(bounds[MAP_MINY], ycrd)
ycrd += gridLines.len - 1 // Start at the top and work down
if(!cropMap && ycrd > world.maxy)
if(!measureOnly)
world.maxy = ycrd // Expand Y here. X is expanded in the loop below
bounds[MAP_MAXY] = max(bounds[MAP_MAXY], ycrd)
else
bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy))
var/maxx = xcrdStart
// Assemble the grid of keys
var/list/list/key_list = list()
for(var/line in gridLines)
var/list/line_keys = list()
xcrd = 1
for(var/tpos = 1 to length(line) - key_len + 1 step key_len)
if(xcrd > world.maxx)
if(cropMap)
break
else if(!measureOnly)
world.maxx = xcrd
if(xcrd >= 1)
var/model_key = copytext(line, tpos, tpos + key_len)
line_keys[++line_keys.len] = model_key
#ifdef TESTING
++turfsSkipped
#endif
CHECK_TICK
maxx = max(maxx, xcrd++)
key_list[++key_list.len] = line_keys
// Rotate the list according to orientation
if(orientation != 0)
var/num_cols = key_list[1].len
var/num_rows = key_list.len
var/list/list/new_key_list = list()
// If it's rotated 180 degrees, the dimensions are the same
if(orientation == 180)
new_key_list.len = num_rows
for(var/i = 1 to new_key_list.len)
new_key_list[i] = list()
new_key_list[i].len = num_cols
// Else, the dimensions are swapped
else
new_key_list.len = num_cols
for(var/i = 1 to new_key_list.len)
new_key_list[i] = list()
new_key_list[i].len = num_rows
num_rows++ // Buffering against the base index of 1
num_cols++
// Populate the new list
for(var/i = 1 to new_key_list.len)
for(var/j = 1 to new_key_list[i].len)
switch(orientation)
if(180)
new_key_list[i][j] = key_list[num_rows - i][num_cols - j]
if(270)
new_key_list[i][j] = key_list[num_rows - j][i]
if(90)
new_key_list[i][j] = key_list[j][num_cols - i]
key_list = new_key_list
if(measureOnly)
for(var/list/line in key_list)
maxx = max(maxx, line.len)
else
for(var/i = 1 to key_list.len)
if(ycrd <= world.maxy && ycrd >= 1)
xcrd = xcrdStart
for(var/j = 1 to key_list[1].len)
if(xcrd > world.maxx)
if(cropMap)
break
else
world.maxx = xcrd
if(xcrd >= 1)
var/no_afterchange = no_changeturf || zexpansion
if(!no_afterchange || (key_list[i][j] != space_key))
if(!grid_models[key_list[i][j]])
throw EXCEPTION("Undefined model key in DMM: [dmm_file], [key_list[i][j]]")
parse_grid(grid_models[key_list[i][j]], key_list[i][j], xcrd, ycrd, zcrd, no_afterchange, orientation)
#ifdef TESTING
else
++turfsSkipped
#endif
CHECK_TICK
maxx = max(maxx, xcrd)
++xcrd
--ycrd
bounds[MAP_MAXX] = max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx)
CHECK_TICK
if(bounds[1] == 1.#INF) // Shouldn't need to check every item
return null
else
// if(!measureOnly)
// if(!no_changeturf)
// for(var/t in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])))
// var/turf/T = t
// //we do this after we load everything in. if we don't; we'll have weird atmos bugs regarding atmos adjacent turfs
// T.post_change()
return bounds
/**
* Fill a given tile with its area/turf/objects/mobs
* Variable model is one full map line (e.g /turf/unsimulated/wall{icon_state = "rock"}, /area/mine/explored)
*
* WORKING :
*
* 1) Read the model string, member by member (delimiter is ',')
*
* 2) Get the path of the atom and store it into a list
*
* 3) a) Check if the member has variables (text within '{' and '}')
*
* 3) b) Construct an associative list with found variables, if any (the atom index in members is the same as its variables in members_attributes)
*
* 4) Instanciates the atom with its variables
*
*/
/dmm_suite/proc/parse_grid(model as text, model_key as text, xcrd as num,ycrd as num,zcrd as num, no_changeturf as num, orientation as num)
/*Method parse_grid()
- Accepts a text string containing a comma separated list of type paths of the
same construction as those contained in a .dmm file, and instantiates them.
*/
var/list/members //will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored)
var/list/members_attributes //will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list())
var/list/cached = modelCache[model]
var/index
if(cached)
members = cached[1]
members_attributes = cached[2]
else
/////////////////////////////////////////////////////////
//Constructing members and corresponding variables lists
////////////////////////////////////////////////////////
members = list()
members_attributes = list()
index = 1
var/old_position = 1
var/dpos
do
//finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored)
dpos = find_next_delimiter_position(model, old_position, ",", "{", "}") //find next delimiter (comma here) that's not within {...}
var/full_def = trim_text(copytext(model, old_position, dpos)) //full definition, e.g : /obj/foo/bar{variables=derp}
var/variables_start = findtext(full_def, "{")
var/atom_def = text2path(trim_text(copytext(full_def, 1, variables_start))) //path definition, e.g /obj/foo/bar
old_position = dpos + 1
if(!atom_def) // Skip the item if the path does not exist. Fix your crap, mappers!
error("Maploader skipping undefined type: '[trim_text(copytext(full_def, 1, variables_start))]' (key=[model_key])")
continue
members.Add(atom_def)
//transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7))
var/list/fields = list()
if(variables_start)//if there's any variable
full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}'
fields = readlist(full_def, ";", TRUE)
if(fields.len)
if(!trim(fields[fields.len]))
--fields.len
for(var/I in fields)
var/value = fields[I]
if(istext(value))
fields[I] = apply_text_macros(value)
//then fill the members_attributes list with the corresponding variables
members_attributes.len++
members_attributes[index++] = fields
CHECK_TICK
while(dpos != 0)
//check and see if we can just skip this turf
//So you don't have to understand this horrid statement, we can do this if
// 1. no_changeturf is set
// 2. the space_key isn't set yet
// 3. there are exactly 2 members
// 4. with no attributes
// 5. and the members are world.turf and world.area
// Basically, if we find an entry like this: "XXX" = (/turf/default, /area/default)
// We can skip calling this proc every time we see XXX
if(no_changeturf && !space_key && members.len == 2 && members_attributes.len == 2 && length(members_attributes[1]) == 0 && length(members_attributes[2]) == 0 && (world.area in members) && (world.turf in members))
space_key = model_key
return
modelCache[model] = list(members, members_attributes)
////////////////
//Instanciation
////////////////
//The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile
var/turf/crds = locate(xcrd,ycrd,zcrd)
//first instance the /area and remove it from the members list
index = members.len
if(members[index] != /area/template_noop)
var/atom/instance
GLOB._preloader.setup(members_attributes[index])//preloader for assigning set variables on atom creation
var/atype = members[index]
for(var/area/A in world)
if(A.type == atype)
instance = A
break
if(!instance)
instance = new atype(null)
if(crds)
instance.contents.Add(crds)
if(GLOB.use_preloader && instance)
GLOB._preloader.load(instance)
//then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect
var/first_turf_index = 1
while(!ispath(members[first_turf_index], /turf)) //find first /turf object in members
first_turf_index++
//turn off base new Initialization until the whole thing is loaded
SSatoms.map_loader_begin()
//instanciate the first /turf
var/turf/T
if(members[first_turf_index] != /turf/template_noop)
T = instance_atom(members[first_turf_index],members_attributes[first_turf_index],crds,no_changeturf,orientation)
if(T)
//if others /turf are presents, simulates the underlays piling effect
index = first_turf_index + 1
while(index <= members.len - 1) // Last item is an /area
var/underlay = T.appearance
T = instance_atom(members[index],members_attributes[index],crds,no_changeturf,orientation)//instance new turf
T.underlays += underlay
index++
//finally instance all remainings objects/mobs
for(index in 1 to first_turf_index-1)
instance_atom(members[index],members_attributes[index],crds,no_changeturf,orientation)
//Restore initialization to the previous value
SSatoms.map_loader_stop()
////////////////
//Helpers procs
////////////////
//Instance an atom at (x,y,z) and gives it the variables in attributes
/dmm_suite/proc/instance_atom(path,list/attributes, turf/crds, no_changeturf, orientation=0)
GLOB._preloader.setup(attributes, path)
if(crds)
if(!no_changeturf && ispath(path, /turf))
. = crds.ChangeTurf(path, FALSE, TRUE)
else
. = create_atom(path, crds)//first preloader pass
if(GLOB.use_preloader && .)//second preloader pass, for those atoms that don't ..() in New()
GLOB._preloader.load(.)
//custom CHECK_TICK here because we don't want things created while we're sleeping to not initialize
if(TICK_CHECK)
SSatoms.map_loader_stop()
stoplag()
SSatoms.map_loader_begin()
// Rotate the atom now that it exists, rather than changing its orientation beforehand through the fields["dir"]
if(orientation != 0) // 0 means no rotation
var/atom/A = .
A.set_dir(turn(A.dir, orientation))
/dmm_suite/proc/create_atom(path, crds)
set waitfor = FALSE
. = new path (crds)
//text trimming (both directions) helper proc
//optionally removes quotes before and after the text (for variable name)
/dmm_suite/proc/trim_text(what as text,trim_quotes=0)
if(trim_quotes)
return trimQuotesRegex.Replace(what, "")
else
return trimRegex.Replace(what, "")
//find the position of the next delimiter,skipping whatever is comprised between opening_escape and closing_escape
//returns 0 if reached the last delimiter
/dmm_suite/proc/find_next_delimiter_position(text as text,initial_position as num, delimiter=",",opening_escape="\"",closing_escape="\"")
var/position = initial_position
var/next_delimiter = findtext(text,delimiter,position,0)
var/next_opening = findtext(text,opening_escape,position,0)
while((next_opening != 0) && (next_opening < next_delimiter))
position = findtext(text,closing_escape,next_opening + 1,0)+1
next_delimiter = findtext(text,delimiter,position,0)
next_opening = findtext(text,opening_escape,position,0)
return next_delimiter
//build a list from variables in text form (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7))
// text - variables in text form. Not including surrounding {} or list()
// delimiter - Delimiter between list entries
// keys_only_string - If true, text that looks like an associative list has its keys treated as var names,
// otherwise they are parsed as valid associative list keys.
//return the filled list
/dmm_suite/proc/readlist(text as text, delimiter=",", keys_only_string = FALSE)
var/list/to_return = list()
if(text == "")
return to_return // Fast bail-out
var/position
var/old_position = 1
do
//find next delimiter that is not within "..."
position = find_next_delimiter_position(text,old_position,delimiter)
//check if this is a simple variable (as in list(var1, var2)) or an associative one (as in list(var1="foo",var2=7))
var/equal_position = findtext(text,"=",old_position, position)
// part to the left of = (the key/var name), or the entire value. If treating it as a var name, strip quotes at the same time.
var/trim_left = trim_text(copytext(text,old_position,(equal_position ? equal_position : position)), keys_only_string)
old_position = position + 1
var/trim_right = trim_left
if(equal_position)//associative var, so do the association
trim_right = trim_text(copytext(text,equal_position+1,position))//the content of the variable
if(!keys_only_string) // We also need to evaluate the key for the types it is permitted to be
if(findtext(trim_left,"\"",1,2)) //Check for string
trim_left = copytext(trim_left,2,findtext(trim_left,"\"",3,0))
else if(isnum(text2num(trim_left))) //Check for number
trim_left = text2num(trim_left)
else if(ispath(text2path(trim_left))) //Check for path
trim_left = text2path(trim_left)
// Parse the value in trim_right
//Check for string
if(findtext(trim_right,"\"",1,2))
trim_right = copytext(trim_right,2,findtext(trim_right,"\"",3,0))
//Check for number
else if(isnum(text2num(trim_right)))
trim_right = text2num(trim_right)
//Check for null
else if(trim_right == "null")
trim_right = null
//Check for list
else if(copytext(trim_right,1,5) == "list")
trim_right = readlist(copytext(trim_right,6,length(trim_right)))
//Check for file
else if(copytext(trim_right,1,2) == "'")
trim_right = file(copytext(trim_right,2,length(trim_right)))
//Check for path
else if(ispath(text2path(trim_right)))
trim_right = text2path(trim_right)
// Now put the trim_right into the result. Method by which we do so varies on if its assoc or not
if(equal_position)
to_return[trim_left] = trim_right
else
to_return += trim_right
while(position != 0)
return to_return
/dmm_suite/Destroy()
..()
return QDEL_HINT_HARDDEL_NOW
//////////////////
//Preloader datum
//////////////////
/dmm_suite/preloader
parent_type = /datum
var/list/attributes
var/target_path
/dmm_suite/preloader/proc/setup(list/the_attributes, path)
if(the_attributes.len)
GLOB.use_preloader = TRUE
attributes = the_attributes
target_path = path
/dmm_suite/preloader/proc/load(atom/what)
for(var/attribute in attributes)
var/value = attributes[attribute]
if(islist(value))
value = deepCopyList(value)
what.vars[attribute] = value
GLOB.use_preloader = FALSE
/area/template_noop
name = "Area Passthrough"
/turf/template_noop
name = "Turf Passthrough"
icon_state = "template_void"
-181
View File
@@ -1,181 +0,0 @@
#define DMM_IGNORE_AREAS 1
#define DMM_IGNORE_TURFS 2
#define DMM_IGNORE_OBJS 4
#define DMM_IGNORE_NPCS 8
#define DMM_IGNORE_PLAYERS 16
#define DMM_IGNORE_MOBS 24
dmm_suite{
var{
quote = "\""
list/letter_digits = list(
"a","b","c","d","e",
"f","g","h","i","j",
"k","l","m","n","o",
"p","q","r","s","t",
"u","v","w","x","y",
"z",
"A","B","C","D","E",
"F","G","H","I","J",
"K","L","M","N","O",
"P","Q","R","S","T",
"U","V","W","X","Y",
"Z"
)
}
save_map(var/turf/t1 as turf, var/turf/t2 as turf, var/map_name as text, var/flags as num){
//Check for illegal characters in file name... in a cheap way.
if(!((ckeyEx(map_name)==map_name) && ckeyEx(map_name))){
CRASH("Invalid text supplied to proc save_map, invalid characters or empty string.")
}
//Check for valid turfs.
if(!isturf(t1) || !isturf(t2)){
CRASH("Invalid arguments supplied to proc save_map, arguments were not turfs.")
}
var/file_text = write_map(t1,t2,flags)
if(fexists("[map_name].dmm")){
fdel("[map_name].dmm")
}
var/saved_map = file("[map_name].dmm")
saved_map << file_text
return saved_map
}
write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){
//Check for valid turfs.
if(!isturf(t1) || !isturf(t2)){
CRASH("Invalid arguments supplied to proc write_map, arguments were not turfs.")
}
var/turf/nw = locate(min(t1.x,t2.x),max(t1.y,t2.y),min(t1.z,t2.z))
var/turf/se = locate(max(t1.x,t2.x),min(t1.y,t2.y),max(t1.z,t2.z))
var/list/templates[0]
var/template_buffer = {""}
var/dmm_text = {""}
for(var/pos_z=nw.z;pos_z<=se.z;pos_z++){
for(var/pos_y=nw.y;pos_y>=se.y;pos_y--){
for(var/pos_x=nw.x;pos_x<=se.x;pos_x++){
var/turf/test_turf = locate(pos_x,pos_y,pos_z)
var/test_template = make_template(test_turf, flags)
var/template_number = templates.Find(test_template)
if(!template_number){
templates.Add(test_template)
template_number = templates.len
}
template_buffer += "[template_number],"
}
template_buffer += ";"
}
template_buffer += "."
}
var/key_length = round/*floor*/(log(letter_digits.len,templates.len-1)+1)
var/list/keys[templates.len]
for(var/key_pos=1;key_pos<=templates.len;key_pos++){
keys[key_pos] = get_model_key(key_pos,key_length)
dmm_text += {""[keys[key_pos]]" = ([templates[key_pos]])\n"}
}
var/z_level = 0
for(var/z_pos=1;TRUE;z_pos=findtext(template_buffer,".",z_pos)+1){
if(z_pos>=length(template_buffer)){break}
if(z_level){dmm_text+={"\n"}}
dmm_text += {"\n(1,1,[++z_level]) = {"\n"}
var/z_block = copytext(template_buffer,z_pos,findtext(template_buffer,".",z_pos))
for(var/y_pos=1;TRUE;y_pos=findtext(z_block,";",y_pos)+1){
if(y_pos>=length(z_block)){break}
var/y_block = copytext(z_block,y_pos,findtext(z_block,";",y_pos))
for(var/x_pos=1;TRUE;x_pos=findtext(y_block,",",x_pos)+1){
if(x_pos>=length(y_block)){break}
var/x_block = copytext(y_block,x_pos,findtext(y_block,",",x_pos))
var/key_number = text2num(x_block)
var/temp_key = keys[key_number]
dmm_text += temp_key
sleep(-1)
}
dmm_text += {"\n"}
sleep(-1)
}
dmm_text += {"\"}"}
sleep(-1)
}
return dmm_text
}
proc{
make_template(var/turf/model as turf, var/flags as num){
var/template = ""
var/obj_template = ""
var/mob_template = ""
var/turf_template = ""
if(!(flags & DMM_IGNORE_TURFS)){
turf_template = "[model.type][check_attributes(model)],"
} else{ turf_template = "[world.turf],"}
var/area_template = ""
if(!(flags & DMM_IGNORE_OBJS)){
for(var/obj/O in model.contents){
obj_template += "[O.type][check_attributes(O)],"
}
}
for(var/mob/M in model.contents){
if(M.client){
if(!(flags & DMM_IGNORE_PLAYERS)){
mob_template += "[M.type][check_attributes(M)],"
}
}
else{
if(!(flags & DMM_IGNORE_NPCS)){
mob_template += "[M.type][check_attributes(M)],"
}
}
}
if(!(flags & DMM_IGNORE_AREAS)){
var/area/m_area = model.loc
area_template = "[m_area.type][check_attributes(m_area)]"
} else{ area_template = "[world.area]"}
template = "[obj_template][mob_template][turf_template][area_template]"
return template
}
check_attributes(var/atom/A){
var/attributes_text = {"{"}
for(var/V in A.vars){
sleep(-1)
if((!issaved(A.vars[V])) || (A.vars[V]==initial(A.vars[V]))){continue}
if(istext(A.vars[V])){
attributes_text += {"[V] = "[A.vars[V]]""}
}
else if(isnum(A.vars[V])||ispath(A.vars[V])){
attributes_text += {"[V] = [A.vars[V]]"}
}
else if(isicon(A.vars[V])||isfile(A.vars[V])){
attributes_text += {"[V] = '[A.vars[V]]'"}
}
else{
continue
}
if(attributes_text != {"{"}){
attributes_text+={"; "}
}
}
if(attributes_text=={"{"}){
return
}
if(copytext(attributes_text, length(attributes_text)-1, 0) == {"; "}){
attributes_text = copytext(attributes_text, 1, length(attributes_text)-1)
}
attributes_text += {"}"}
return attributes_text
}
get_model_key(var/which as num, var/key_length as num){
var/key = ""
var/working_digit = which-1
for(var/digit_pos=key_length;digit_pos>=1;digit_pos--){
var/place_value = round/*floor*/(working_digit/(letter_digits.len**(digit_pos-1)))
working_digit-=place_value*(letter_digits.len**(digit_pos-1))
key = "[key][letter_digits[place_value+1]]"
}
return key
}
}
}
#undef DMM_IGNORE_AREAS
#undef DMM_IGNORE_TURFS
#undef DMM_IGNORE_OBJS
#undef DMM_IGNORE_NPCS
#undef DMM_IGNORE_PLAYERS
#undef DMM_IGNORE_MOBS
-10
View File
@@ -102,16 +102,6 @@
description = "A small cabin; turned into a shelter capsule. Includes dorm amenities, and a nice dinner."
mappath = "maps/submaps/shelters/shelter_cab.dmm"
/datum/map_template/shelter/zeta
name = "Shelter Zeta"
shelter_id = "shelter_zeta"
description = "An small dropship with a massive number of equipment, \
weapons, and supplies. Contains exterior weapons, point defense, \
a shield generator, and extremely advanced technology. It is \
unknown who manufactued a vessel like this, as it is beyond the \
technology level of most contemporary powers."
mappath = "maps/offmap_vr/om_ships/shelter_6.dmm"
/datum/map_template/shelter/phi
name = "Shelter Phi"
shelter_id = "shelter_phi"
@@ -15,6 +15,7 @@
/datum/random_map/automata/generate_map()
map = verdigris_generate_automata(limit_x, limit_y, iterations, initial_wall_cell)
return
/datum/random_map/automata/get_additional_spawns(value, turf/T)
return
-5
View File
@@ -446,11 +446,6 @@ PTO_CAP 50
# Forbids players from joining if they have no set General flavor text
REQUIRE_FLAVOR
## Uncomment to enable submaps to have their orientation rotated randomly during map generation.
## Submap rotation is an experimental feature and can cause bugs and weirdness if certain objects inside the submap are coded poorly.
## Submaps can still be rotated when loading manually with the admin verbs, if desired.
# RANDOM_SUBMAP_ORIENTATION
## Uncomment to allow the AI job to use 'AI Shells', a new type of borg that lets the AI hop into and out of them at will.
## This has some balance implications, and so it might not be desirable for all servers.
ALLOW_AI_SHELLS
+2 -2
View File
@@ -39,7 +39,7 @@ virgo_minitest: VORE, Testing map used for CI, do not touch
## What _submaps.dm (map-folder-specific, Tether uses _tether_submaps.dm) should look like:
# Map-specific areas should be loaded without a #include, and the mappath should just be:
mappath = 'tether_plains.dmm'
mappath = "maps/your_map/tether_plains.dmm"
# Non-map specific expedition areas should be loaded as follows:
@@ -59,7 +59,7 @@ mappath = 'tether_plains.dmm'
/datum/map_template/tether_lateload/away_beach
name = "Desert Planet - Z1 Beach"
desc = "The beach away mission."
mappath = 'maps/expedition_vr/beach/beach.dmm'
mappath = "maps/expedition_vr/beach/beach.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/away_beach
/datum/map_z_level/tether_lateload/away_beach
Binary file not shown.
+1 -1
View File
@@ -450,7 +450,7 @@ ESCAPE_POD(1)
/datum/map_template/om_ships/hybrid
name = "OM Ship - Generic Shuttle"
desc = "A small privately-owned vessel."
mappath = 'generic_shuttle.dmm'
mappath = "maps/cynosure/generic_shuttle.dmm"
annihilate = TRUE
// The shuttle's area(s)
+45 -48
View File
@@ -68,82 +68,82 @@
/datum/map_template/surface/mountains/normal/deadBeacon
name = "Abandoned Relay"
desc = "An unregistered comms relay, abandoned to the elements."
mappath = 'maps/expedition_vr/beach/submaps/deadBeacon.dmm'
mappath = "maps/expedition_vr/beach/submaps/deadBeacon.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/prepper1
name = "Prepper Bunker"
desc = "A little hideaway for someone with more time and money than sense."
mappath = 'maps/expedition_vr/beach/submaps/prepper1.dmm'
mappath = "maps/expedition_vr/beach/submaps/prepper1.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/qshuttle
name = "Quarantined Shuttle"
desc = "An emergency landing turned viral outbreak turned tragedy."
mappath = 'maps/expedition_vr/beach/submaps/quarantineshuttle.dmm'
mappath = "maps/expedition_vr/beach/submaps/quarantineshuttle.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/Mineshaft1
name = "Abandoned Mineshaft 1"
desc = "An abandoned minning tunnel from a lost money making effort."
mappath = 'maps/expedition_vr/beach/submaps/Mineshaft1.dmm'
mappath = "maps/expedition_vr/beach/submaps/Mineshaft1.dmm"
cost = 5
/datum/map_template/surface/mountains/normal/crystal1
name = "Crystal Cave 1"
desc = "A small cave with glowing gems and diamonds."
mappath = 'maps/expedition_vr/beach/submaps/crystal1.dmm'
mappath = "maps/expedition_vr/beach/submaps/crystal1.dmm"
cost = 5
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/crystal2
name = "Crystal Cave 2"
desc = "A moderate sized cave with glowing gems and diamonds."
mappath = 'maps/expedition_vr/beach/submaps/crystal2.dmm'
mappath = "maps/expedition_vr/beach/submaps/crystal2.dmm"
cost = 10
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/crystal2
name = "Crystal Cave 3"
desc = "A large spiral of crystals with diamonds in the center."
mappath = 'maps/expedition_vr/beach/submaps/crystal3.dmm'
mappath = "maps/expedition_vr/beach/submaps/crystal3.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/lost_explorer
name = "Lost Explorer"
desc = "The remains of an explorer who rotted away ages ago, and their equipment."
mappath = 'maps/expedition_vr/beach/submaps/lost_explorer.dmm'
mappath = "maps/expedition_vr/beach/submaps/lost_explorer.dmm"
cost = 5
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/Rockb1
name = "Rocky Base 1"
desc = "Someones underground hidey hole"
mappath = 'maps/expedition_vr/beach/submaps/Rockb1.dmm'
mappath = "maps/expedition_vr/beach/submaps/Rockb1.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/corgiritual
name = "Dark Ritual"
desc = "Who put all these plushies here? What are they doing?"
mappath = 'maps/expedition_vr/beach/submaps/ritual.dmm'
mappath = "maps/expedition_vr/beach/submaps/ritual.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/abandonedtemple
name = "Abandoned Temple"
desc = "An ancient temple, long since abandoned. Perhaps alien in origin?"
mappath = 'maps/expedition_vr/beach/submaps/temple.dmm'
mappath = "maps/expedition_vr/beach/submaps/temple.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/digsite
name = "Dig Site"
desc = "A small abandoned dig site."
mappath = 'maps/expedition_vr/beach/submaps/digsite.dmm'
mappath = "maps/expedition_vr/beach/submaps/digsite.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/vault1
name = "Mine Vault 1"
desc = "A small vault with potential loot."
mappath = 'maps/expedition_vr/beach/submaps/vault1.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -151,7 +151,7 @@
/datum/map_template/surface/mountains/normal/vault2
name = "Mine Vault 2"
desc = "A small vault with potential loot."
mappath = 'maps/expedition_vr/beach/submaps/vault2.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault2.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -159,56 +159,56 @@
/datum/map_template/surface/mountains/normal/vault3
name = "Mine Vault 3"
desc = "A small vault with potential loot. Also a horrible suprise."
mappath = 'maps/expedition_vr/beach/submaps/vault3.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault3.dmm"
cost = 15
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/IceCave1A
name = "Ice Cave 1A"
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
mappath = 'maps/expedition_vr/beach/submaps/IceCave1A.dmm'
mappath = "maps/expedition_vr/beach/submaps/IceCave1A.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/IceCave1B
name = "Ice Cave 1B"
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
mappath = 'maps/expedition_vr/beach/submaps/IceCave1B.dmm'
mappath = "maps/expedition_vr/beach/submaps/IceCave1B.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/IceCave1C
name = "Ice Cave 1C"
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
mappath = 'maps/expedition_vr/beach/submaps/IceCave1C.dmm'
mappath = "maps/expedition_vr/beach/submaps/IceCave1C.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/SwordCave
name = "Cursed Sword Cave"
desc = "An underground lake. The sword on the lake's island holds a terrible secret."
mappath = 'maps/expedition_vr/beach/submaps/SwordCave.dmm'
mappath = "maps/expedition_vr/beach/submaps/SwordCave.dmm"
/datum/map_template/surface/mountains/normal/supplydrop1
name = "Supply Drop 1"
desc = "A drop pod that landed deep within the mountains."
mappath = 'maps/expedition_vr/beach/submaps/SupplyDrop1.dmm'
mappath = "maps/expedition_vr/beach/submaps/SupplyDrop1.dmm"
cost = 10
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/crashedcontainmentshuttle
name = "Crashed Cargo Shuttle"
desc = "A severely damaged military shuttle, its cargo seems to remain intact."
mappath = 'maps/expedition_vr/beach/submaps/crashedcontainmentshuttle.dmm'
mappath = "maps/expedition_vr/beach/submaps/crashedcontainmentshuttle.dmm"
cost = 30
/datum/map_template/surface/mountains/normal/deadspy
name = "Spy Remains"
desc = "W+M1 = Salt."
mappath = 'maps/expedition_vr/beach/submaps/deadspy.dmm'
mappath = "maps/expedition_vr/beach/submaps/deadspy.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/geyser1
name = "Ore-Rich Geyser"
desc = "A subterranean geyser that produces steam. This one has a particularly abundant amount of materials surrounding it."
mappath = 'maps/expedition_vr/beach/submaps/Geyser1.dmm'
mappath = "maps/expedition_vr/beach/submaps/Geyser1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Underground Geysers"
@@ -216,7 +216,7 @@
/datum/map_template/surface/mountains/normal/geyser2
name = "Fenced Geyser"
desc = "A subterranean geyser that produces steam. This one has a damaged fence surrounding it."
mappath = 'maps/expedition_vr/beach/submaps/Geyser2.dmm'
mappath = "maps/expedition_vr/beach/submaps/Geyser2.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Underground Geysers"
@@ -224,7 +224,7 @@
/datum/map_template/surface/mountains/normal/geyser3
name = "Magmatic Geyser"
desc = "A subterranean geyser that produces incendiary gas. It is recessed into the ground, and filled with magma. It's a relatively dormant volcano."
mappath = 'maps/expedition_vr/beach/submaps/Geyser2.dmm'
mappath = "maps/expedition_vr/beach/submaps/Geyser2.dmm"
cost = 10
allow_duplicates = TRUE
template_group = "Underground Geysers"
@@ -232,7 +232,7 @@
/datum/map_template/surface/mountains/normal/cliff1
name = "Ore-Topped Cliff"
desc = "A raised area of rock created by volcanic forces."
mappath = 'maps/expedition_vr/beach/submaps/Cliff1.dmm'
mappath = "maps/expedition_vr/beach/submaps/Cliff1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Underground Cliffs"
@@ -240,7 +240,7 @@
/datum/map_template/surface/mountains/normal/deadly_rabbit // VOREStation Edit
name = "The Killer Rabbit"
desc = "A cave where the Knights of the Round have fallen to a murderous Rabbit."
mappath = 'maps/expedition_vr/beach/submaps/deadly_rabbit_vr.dmm'
mappath = "maps/expedition_vr/beach/submaps/deadly_rabbit_vr.dmm"
cost = 5
allow_duplicates = FALSE
@@ -252,46 +252,46 @@
/datum/map_template/surface/mountains/deep/lost_explorer
name = "Lost Explorer, Deep"
desc = "The remains of an explorer who rotted away ages ago, and their equipment. Again."
mappath = 'maps/expedition_vr/beach/submaps/lost_explorer.dmm'
mappath = "maps/expedition_vr/beach/submaps/lost_explorer.dmm"
cost = 5
allow_duplicates = TRUE */
/datum/map_template/surface/mountains/normal/crashed_ufo //VOREStation Edit
name = "Crashed UFO"
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet it still seems to be running..."
mappath = 'maps/expedition_vr/beach/submaps/crashed_ufo.dmm'
mappath = "maps/expedition_vr/beach/submaps/crashed_ufo.dmm"
cost = 40
discard_prob = 50
/datum/map_template/surface/mountains/normal/crashed_ufo_frigate //VOREStation Edit
name = "Crashed UFO Frigate"
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet the combat protocols still seem to be running..."
mappath = 'maps/expedition_vr/beach/submaps/crashed_ufo_frigate.dmm'
mappath = "maps/expedition_vr/beach/submaps/crashed_ufo_frigate.dmm"
cost = 60
discard_prob = 50
/datum/map_template/surface/mountains/normal/Scave1 //VOREStation Edit
name = "Spider Cave 1"
desc = "A minning tunnel home to an aggressive collection of spiders."
mappath = 'maps/expedition_vr/beach/submaps/Scave1.dmm'
mappath = "maps/expedition_vr/beach/submaps/Scave1.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/CaveTrench //VOREStation Edit
name = "Cave River"
desc = "A strange underground river."
mappath = 'maps/expedition_vr/beach/submaps/CaveTrench.dmm'
mappath = "maps/expedition_vr/beach/submaps/CaveTrench.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/Cavelake //VOREStation Edit
name = "Cave Lake"
desc = "A large underground lake."
mappath = 'maps/expedition_vr/beach/submaps/Cavelake.dmm'
mappath = "maps/expedition_vr/beach/submaps/Cavelake.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/vault1 //VOREStation Edit
name = "Mine Vault 1"
desc = "A small vault with potential loot."
mappath = 'maps/expedition_vr/beach/submaps/vault1.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -299,7 +299,7 @@
/datum/map_template/surface/mountains/normal/vault2 //VOREStation Edit
name = "Mine Vault 2"
desc = "A small vault with potential loot."
mappath = 'maps/expedition_vr/beach/submaps/vault2.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault2.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -307,67 +307,64 @@
/datum/map_template/surface/mountains/normal/vault3 //VOREStation Edit
name = "Mine Vault 3"
desc = "A small vault with potential loot. Also a horrible suprise."
mappath = 'maps/expedition_vr/beach/submaps/vault3.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault3.dmm"
cost = 15
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/vault4 //VOREStation Edit
name = "Mine Vault 4"
desc = "A small xeno vault with potential loot. Also horrible suprises."
mappath = 'maps/expedition_vr/beach/submaps/vault4.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault4.dmm"
cost = 20
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/vault5 //VOREStation Edit
name = "Mine Vault 5"
desc = "A small xeno vault with potential loot. Also major horrible suprises."
mappath = 'maps/expedition_vr/beach/submaps/vault5.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault5.dmm"
cost = 25
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/vault6 //VOREStation Edit
name = "Mine Vault 6"
desc = "A small mercenary tower with potential loot."
mappath = 'maps/expedition_vr/beach/submaps/vault6.dmm'
mappath = "maps/expedition_vr/beach/submaps/vault6.dmm"
cost = 25
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/BlastMine1 //VOREStation Edit
name = "Blast Mine 1"
desc = "An abandoned blast mining site, seems that local wildlife has moved in."
mappath = 'maps/expedition_vr/beach/submaps/BlastMine1.dmm'
mappath = "maps/expedition_vr/beach/submaps/BlastMine1.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/lava_trench //VOREStation Edit
name = "lava trench"
desc = "A long stretch of lava underground, almost river-like, with a small crystal research outpost on the side."
mappath = 'maps/expedition_vr/beach/submaps/lava_trench.dmm'
mappath = "maps/expedition_vr/beach/submaps/lava_trench.dmm"
cost = 20
fixed_orientation = TRUE
/datum/map_template/surface/mountains/normal/crashedmedshuttle //VOREStation Edit
name = "Crashed Med Shuttle"
desc = "A medical response shuttle that went missing some time ago. So this is where they went."
mappath = 'maps/expedition_vr/beach/submaps/CrashedMedShuttle1.dmm'
mappath = "maps/expedition_vr/beach/submaps/CrashedMedShuttle1.dmm"
cost = 20
fixed_orientation = TRUE
/datum/map_template/surface/mountains/normal/excavation1 //VOREStation Edit
name = "Excavation Site"
desc = "An abandoned mining site."
mappath = 'maps/expedition_vr/beach/submaps/excavation1.dmm'
mappath = "maps/expedition_vr/beach/submaps/excavation1.dmm"
cost = 20
/datum/map_template/surface/mountains/deep/spatial_anomaly
name = "spatial anomaly"
desc = "A strange section of the caves that seems twist and turn in ways that shouldn't be physically possible."
mappath = 'maps/expedition_vr/beach/submaps/spatial_anomaly.dmm'
mappath = "maps/expedition_vr/beach/submaps/spatial_anomaly.dmm"
cost = 20
fixed_orientation = TRUE
/datum/map_template/surface/mountains/normal/Speakeasy //VOREStation add
name = "Speakeasy"
desc = "A hidden underground bar to serve drinks in secret and in style."
mappath = 'maps/expedition_vr/beach/submaps/speakeasy_vr.dmm'
mappath = "maps/expedition_vr/beach/submaps/speakeasy_vr.dmm"
cost = 10
allow_duplicates = FALSE
+13 -13
View File
@@ -404,7 +404,7 @@
/datum/map_template/gb_lateload/gb_centcom
name = "Groundbase - Central Command"
desc = "Central Command lives here!"
mappath = 'gb-centcomm.dmm'
mappath = "maps/groundbase/gb-centcomm.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_centcom
@@ -420,7 +420,7 @@
/datum/map_template/gb_lateload/gb_misc
name = "Groundbase - Misc"
desc = "Misc areas, like some transit areas, holodecks, merc area."
mappath = 'gb-misc.dmm'
mappath = "maps/groundbase/gb-misc.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/misc
@@ -433,7 +433,7 @@
/datum/map_template/gb_lateload/mining
name = "V3c Underground"
desc = "The caves underneath the survace of Virgo 3C"
mappath = 'maps/groundbase/gb-mining.dmm'
mappath = "maps/groundbase/gb-mining.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/mining
@@ -453,7 +453,7 @@
/datum/map_template/common_lateload/away_aerostat
name = "Remmi Aerostat - Z1 Aerostat"
desc = "The Virgo 2 Aerostat away mission."
mappath = 'maps/expedition_vr/aerostat/aerostat.dmm'
mappath = "maps/expedition_vr/aerostat/aerostat.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_aerostat
////////////////////////////////////////////////////////////////////////
@@ -508,28 +508,28 @@
/datum/map_template/gb_lateload/wilds/north/type1
name = "Northern Wilds 1"
desc = "Wilderness"
mappath = 'maps/groundbase/northwilds/northwilds1.dmm'
mappath = "maps/groundbase/northwilds/northwilds1.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_north_wilds
/datum/map_template/gb_lateload/wilds/north/type2
name = "Northern Wilds 2"
desc = "Wilderness"
mappath = 'maps/groundbase/northwilds/northwilds2.dmm'
mappath = "maps/groundbase/northwilds/northwilds2.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_north_wilds
/datum/map_template/gb_lateload/wilds/south/type1
name = "Southern Wilds 1"
desc = "Wilderness"
mappath = 'maps/groundbase/southwilds/southwilds1.dmm'
mappath = "maps/groundbase/southwilds/southwilds1.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_south_wilds
/datum/map_template/gb_lateload/wilds/south/type2
name = "Southern Wilds 2"
desc = "Wilderness"
mappath = 'maps/groundbase/southwilds/southwilds2.dmm'
mappath = "maps/groundbase/southwilds/southwilds2.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_south_wilds
/datum/map_template/gb_lateload/wilds/south/type3
name = "Southern Wilds 3"
desc = "Wilderness"
mappath = 'maps/groundbase/southwilds/southwilds3.dmm'
mappath = "maps/groundbase/southwilds/southwilds3.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_south_wilds
/datum/map_template/gb_lateload/wilds/south/type3/on_map_loaded(z)
. = ..()
@@ -541,23 +541,23 @@
/datum/map_template/gb_lateload/wilds/east/type1
name = "Eastern Wilds 1"
desc = "Wilderness"
mappath = 'maps/groundbase/eastwilds/eastwilds1.dmm'
mappath = "maps/groundbase/eastwilds/eastwilds1.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_east_wilds
/datum/map_template/gb_lateload/wilds/east/type2
name = "Eastern Wilds 2"
desc = "Wilderness"
mappath = 'maps/groundbase/eastwilds/eastwilds2.dmm'
mappath = "maps/groundbase/eastwilds/eastwilds2.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_east_wilds
/datum/map_template/gb_lateload/wilds/west/type1
name = "Western Wilds 1"
desc = "Wilderness"
mappath = 'maps/groundbase/westwilds/westwilds1.dmm'
mappath = "maps/groundbase/westwilds/westwilds1.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_west_wilds
/datum/map_template/gb_lateload/wilds/west/type2
name = "Western Wilds 2"
desc = "Wilderness"
mappath = 'maps/groundbase/westwilds/westwilds2.dmm'
mappath = "maps/groundbase/westwilds/westwilds2.dmm"
associated_map_datum = /datum/map_z_level/gb_lateload/gb_west_wilds
/*
File diff suppressed because it is too large Load Diff
+49 -49
View File
@@ -13,7 +13,7 @@
/datum/map_template/common_lateload/away_beach
name = "Desert Planet - Z1 Beach"
desc = "The beach away mission."
mappath = 'maps/expedition_vr/beach/beach.dmm'
mappath = "maps/expedition_vr/beach/beach.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_beach
/datum/map_z_level/common_lateload/away_beach
@@ -24,7 +24,7 @@
/datum/map_template/common_lateload/away_beach_cave
name = "Desert Planet - Z2 Cave"
desc = "The beach away mission's cave."
mappath = 'maps/expedition_vr/beach/cave.dmm'
mappath = "maps/expedition_vr/beach/cave.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_beach_cave
/datum/map_template/common_lateload/away_beach_cave/on_map_loaded(z)
@@ -49,7 +49,7 @@
/datum/map_template/common_lateload/away_alienship
name = "Alien Ship - Z1 Ship"
desc = "The alien ship away mission."
mappath = 'maps/expedition_vr/alienship/alienship.dmm'
mappath = "maps/expedition_vr/alienship/alienship.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_alienship
/datum/map_z_level/common_lateload/away_alienship
@@ -63,7 +63,7 @@
/datum/map_template/common_lateload/away_aerostat_surface
name = "Remmi Aerostat - Z2 Surface"
desc = "The surface from the Virgo 2 Aerostat."
mappath = 'maps/expedition_vr/aerostat/surface.dmm'
mappath = "maps/expedition_vr/aerostat/surface.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_aerostat_surface
/datum/map_template/common_lateload/away_aerostat_surface/on_map_loaded(z)
@@ -85,7 +85,7 @@
/datum/map_template/common_lateload/away_debrisfield
name = "Debris Field - Z1 Space"
desc = "The Virgo 3 Debris Field away mission."
mappath = 'maps/expedition_vr/space/debrisfield.dmm'
mappath = "maps/expedition_vr/space/debrisfield.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_debrisfield
/datum/map_template/common_lateload/away_debrisfield/on_map_loaded(z)
@@ -100,7 +100,7 @@
/datum/map_template/common_lateload/away_fueldepot
name = "Fuel Depot - Z1 Space"
desc = "An unmanned fuel depot floating in space."
mappath = 'maps/expedition_vr/space/fueldepot.dmm'
mappath = "maps/expedition_vr/space/fueldepot.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_fueldepot
/datum/map_z_level/common_lateload/away_fueldepot
@@ -130,71 +130,71 @@
/datum/map_template/common_lateload/gateway/snow_outpost
name = "Snow Outpost"
desc = "Big snowy area with various outposts."
mappath = 'maps/gateway_vr/snow_outpost.dmm'
mappath = "maps/gateway_vr/snow_outpost.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/gateway_destination
*/
#include "../gateway_vr/zoo.dm"
/datum/map_template/common_lateload/gateway/zoo
name = "Gateway - Zoo"
desc = "Gigantic space zoo"
mappath = 'maps/gateway_vr/zoo_b.dmm'
mappath = "maps/gateway_vr/zoo_b.dmm"
#include "../gateway_vr/carpfarm.dm"
/datum/map_template/common_lateload/gateway/carpfarm
name = "Gateway - Carp Farm"
desc = "Asteroid base surrounded by carp"
mappath = 'maps/gateway_vr/carpfarm.dmm'
mappath = "maps/gateway_vr/carpfarm.dmm"
#include "../gateway_vr/snowfield.dm"
/datum/map_template/common_lateload/gateway/snowfield
name = "Gateway - Snow Field"
desc = "An old base in middle of snowy wasteland"
mappath = 'maps/gateway_vr/snowfield.dmm'
mappath = "maps/gateway_vr/snowfield.dmm"
#include "../gateway_vr/listeningpost.dm"
/datum/map_template/common_lateload/gateway/listeningpost
name = "Gateway - Listening Post"
desc = "Asteroid-bound mercenary listening post"
mappath = 'maps/gateway_vr/listeningpost.dmm'
mappath = "maps/gateway_vr/listeningpost.dmm"
#include "../gateway_vr/variable/honlethhighlands.dm"
/datum/map_template/common_lateload/gateway/honlethhighlands_a
name = "Gateway - Honleth Highlands A"
desc = "The cold surface of some planet."
mappath = 'maps/gateway_vr/variable/honlethhighlands_a.dmm'
mappath = "maps/gateway_vr/variable/honlethhighlands_a.dmm"
/datum/map_template/common_lateload/gateway/honlethhighlands_b
name = "Gateway - Honleth Highlands B"
desc = "The cold surface of some planet."
mappath = 'maps/gateway_vr/variable/honlethhighlands_b.dmm'
mappath = "maps/gateway_vr/variable/honlethhighlands_b.dmm"
#include "../gateway_vr/variable/arynthilake.dm"
/datum/map_template/common_lateload/gateway/arynthilake
name = "Gateway - Arynthi Lake A"
desc = "A grassy surface with some abandoned structures."
mappath = 'maps/gateway_vr/variable/arynthilake_a.dmm'
mappath = "maps/gateway_vr/variable/arynthilake_a.dmm"
/datum/map_template/common_lateload/gateway/arynthilakeunderground
name = "Gateway - Arynthi Lake Underground A"
desc = "A grassy surface with some abandoned structures."
mappath = 'maps/gateway_vr/variable/arynthilakeunderground_a.dmm'
mappath = "maps/gateway_vr/variable/arynthilakeunderground_a.dmm"
/datum/map_template/common_lateload/gateway/arynthilake_b
name = "Gateway - Arynthi Lake B"
desc = "A grassy surface with some abandoned structures."
mappath = 'maps/gateway_vr/variable/arynthilake_b.dmm'
mappath = "maps/gateway_vr/variable/arynthilake_b.dmm"
/datum/map_template/common_lateload/gateway/arynthilakeunderground_b
name = "Gateway - Arynthi Lake Underground B"
desc = "A grassy surface with some abandoned structures."
mappath = 'maps/gateway_vr/variable/arynthilakeunderground_b.dmm'
mappath = "maps/gateway_vr/variable/arynthilakeunderground_b.dmm"
#include "../gateway_vr/wildwest.dm"
/datum/map_template/common_lateload/gateway/wildwest
name = "Gateway - Wild West"
desc = "A classic."
mappath = 'maps/gateway_vr/wildwest.dmm'
mappath = "maps/gateway_vr/wildwest.dmm"
#include "../gateway_vr/lucky_7.dm"
@@ -214,7 +214,7 @@
/datum/map_template/common_lateload/om_adventure/grasscave
name = "Grass Cave"
desc = "Looks like a cave with some grass in it."
mappath = 'maps/om_adventure/grasscave.dmm'
mappath = "maps/om_adventure/grasscave.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/om_adventure_destination
/datum/map_template/common_lateload/om_adventure/grasscave/on_map_loaded(z)
@@ -246,58 +246,58 @@
/datum/map_template/common_lateload/redgate/teppi_ranch
name = "Redgate - Teppi Ranch"
desc = "An abandoned teppi ranch!"
mappath = 'maps/redgate/teppiranch.dmm'
mappath = "maps/redgate/teppiranch.dmm"
/datum/map_template/common_lateload/redgate/innland
name = "Redgate - Innland"
desc = "Caves and grass and a tavern, woah!"
mappath = 'maps/redgate/innland.dmm'
mappath = "maps/redgate/innland.dmm"
/datum/map_template/common_lateload/redgate/abandonedisland
name = "Redgate - Abandoned Island"
desc = "It seems like it used to be people here!"
mappath = 'maps/redgate/abandonedisland.dmm'
mappath = "maps/redgate/abandonedisland.dmm"
/datum/map_template/common_lateload/redgate/darkadventure
name = "Redgate - Dark Adventure"
desc = "This place seems broken!"
mappath = 'maps/redgate/darkadventure.dmm'
mappath = "maps/redgate/darkadventure.dmm"
/datum/map_template/common_lateload/redgate/stardog
name = "Redgate - Star Dog"
desc = "That's a big dog!"
mappath = 'maps/redgate/stardog.dmm'
mappath = "maps/redgate/stardog.dmm"
#include "../redgate/eggnogtown.dm"
/datum/map_template/common_lateload/redgate/eggnogtown
name = "Redgate - Eggnog Town"
desc = "A comfortable snowy town."
mappath = 'maps/redgate/eggnogtown.dmm'
mappath = "maps/redgate/eggnogtown.dmm"
/datum/map_template/common_lateload/redgate/eggnogtownunderground
name = "Redgate - Eggnog Town Underground"
desc = "A comfortable snowy town."
mappath = 'maps/redgate/eggnogtownunderground.dmm'
mappath = "maps/redgate/eggnogtownunderground.dmm"
/datum/map_template/common_lateload/redgate/hotsprings
name = "Redgate - Hotsprings"
desc = "This place is rather cosy for somewhere so abandoned!"
mappath = 'maps/redgate/hotsprings.dmm'
mappath = "maps/redgate/hotsprings.dmm"
/datum/map_template/common_lateload/redgate/cybercity
name = "Redgate - Rain City"
desc = "A strange city on lockdown."
mappath = 'maps/redgate/cybercity.dmm'
mappath = "maps/redgate/cybercity.dmm"
/datum/map_template/common_lateload/redgate/islands
name = "Redgate - Islands"
desc = "A series of islands out in the ocean."
mappath = 'maps/redgate/islands.dmm'
mappath = "maps/redgate/islands.dmm"
/datum/map_template/common_lateload/redgate/islands_underwater
name = "Redgate - Islands Underwater"
desc = "A series of islands out in the ocean."
mappath = 'maps/redgate/islands_underwater.dmm'
mappath = "maps/redgate/islands_underwater.dmm"
/obj/effect/landmark/map_data/islands
height = 2
@@ -305,12 +305,12 @@
/datum/map_template/common_lateload/redgate/train
name = "Redgate - Moving Train"
desc = "A long train travelling to who-knows-where."
mappath = 'maps/redgate/train.dmm'
mappath = "maps/redgate/train.dmm"
/datum/map_template/common_lateload/redgate/train_upper
name = "Redgate - Moving Train Upper Level"
desc = "A long train travelling to who-knows-where."
mappath = 'maps/redgate/train_upper.dmm'
mappath = "maps/redgate/train_upper.dmm"
/obj/effect/landmark/map_data/train
height = 2
@@ -318,12 +318,12 @@
/datum/map_template/common_lateload/redgate/fantasy
name = "Redgate - Fantasy Town"
desc = "A fantasy town full of low tech stuff."
mappath = 'maps/redgate/fantasy.dmm'
mappath = "maps/redgate/fantasy.dmm"
/datum/map_template/common_lateload/redgate/fantasy_dungeon
name = "Redgate - Fantasy Dungeon"
desc = "A fantasy dungeon with lots of monsters and loot."
mappath = 'maps/redgate/fantasy_dungeon.dmm'
mappath = "maps/redgate/fantasy_dungeon.dmm"
/obj/effect/landmark/map_data/fantasy
height = 2
@@ -331,22 +331,22 @@
/datum/map_template/common_lateload/redgate/laserdome
name = "Redgate - Laserdome"
desc = "A large orbital station with recreational facilities, namely a pair of laser tag arenas."
mappath = 'maps/redgate/laserdome.dmm'
mappath = "maps/redgate/laserdome.dmm"
/datum/map_template/common_lateload/redgate/falls
name = "Redgate - Cascading Falls"
desc = "A world made up almost entirely of water, sprinkled with obscure marble structures."
mappath = 'maps/redgate/falls/falls.dmm'
mappath = "maps/redgate/falls/falls.dmm"
/datum/map_template/common_lateload/redgate/jungle
name = "Redgate - Jungle"
desc = "A fantasy town full of low tech stuff."
mappath = 'maps/redgate/jungle.dmm'
mappath = "maps/redgate/jungle.dmm"
/datum/map_template/common_lateload/redgate/jungle_underground
name = "Redgate - Jungle Underground"
desc = "A fantasy dungeon with lots of monsters and loot."
mappath = 'maps/redgate/jungle_underground.dmm'
mappath = "maps/redgate/jungle_underground.dmm"
/obj/effect/landmark/map_data/jungle
height = 2
@@ -354,7 +354,7 @@
/datum/map_template/common_lateload/redgate/facility
name = "Redgate - Facility"
desc = "A facility full of unusual experiments."
mappath = 'maps/redgate/facility.dmm'
mappath = "maps/redgate/facility.dmm"
//////////////////////////////////////////////////////////////////////////////////////
// Admin-use z-levels for loading whenever an admin feels like
@@ -365,7 +365,7 @@
/datum/map_template/common_lateload/fun/spa
name = "Space Spa"
desc = "A pleasant spa located in a spaceship."
mappath = 'maps/submaps/admin_use_vr/spa.dmm'
mappath = "maps/submaps/admin_use_vr/spa.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/fun/spa
@@ -548,42 +548,42 @@
/datum/map_template/admin_use/ert
name = "Special Area - ERT"
desc = "It's the ERT ship! Lorge."
mappath = 'maps/submaps/admin_use_vr/ert.dmm'
mappath = "maps/submaps/admin_use_vr/ert.dmm"
/datum/map_template/admin_use/trader
name = "Special Area - Trader"
desc = "Big trader ship."
mappath = 'maps/submaps/admin_use_vr/tradeship.dmm'
mappath = "maps/submaps/admin_use_vr/tradeship.dmm"
/datum/map_template/admin_use/salamander_trader
name = "Special Area - Salamander Trader"
desc = "Modest trader ship."
mappath = 'maps/submaps/admin_use_vr/salamander_trader.dmm'
mappath = "maps/submaps/admin_use_vr/salamander_trader.dmm"
/datum/map_template/admin_use/mercenary
name = "Special Area - Merc Ship"
desc = "Prepare tae be boarded, arr!"
mappath = 'maps/submaps/admin_use_vr/kk_mercship.dmm'
mappath = "maps/submaps/admin_use_vr/kk_mercship.dmm"
/datum/map_template/admin_use/skipjack
name = "Special Area - Skipjack Base"
desc = "Stinky!"
mappath = 'maps/submaps/admin_use_vr/skipjack.dmm'
mappath = "maps/submaps/admin_use_vr/skipjack.dmm"
/datum/map_template/admin_use/thunderdome
name = "Special Area - Thunderdome"
desc = "Thunderrrrdomeee"
mappath = 'maps/submaps/admin_use_vr/thunderdome.dmm'
mappath = "maps/submaps/admin_use_vr/thunderdome.dmm"
/datum/map_template/admin_use/wizardbase
name = "Special Area - Wizard Base"
desc = "Wingardium Levosia"
mappath = 'maps/submaps/admin_use_vr/wizard.dmm'
mappath = "maps/submaps/admin_use_vr/wizard.dmm"
/datum/map_template/admin_use/dojo
name = "Special Area - Ninja Dojo"
desc = "Sneaky"
mappath = 'maps/submaps/admin_use_vr/dojo.dmm'
mappath = "maps/submaps/admin_use_vr/dojo.dmm"
//////////////////////////////////////////////////////////////////////////////
//Overmap ship spawns
@@ -623,7 +623,7 @@
/datum/map_template/common_lateload/offmap/talon_v2
name = "Offmap Ship - Talon V2"
desc = "Offmap spawn ship, the Talon."
mappath = 'maps/offmap_vr/talon/talon_v2.dmm'
mappath = "maps/offmap_vr/talon/talon_v2.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/talon_v2
/datum/map_z_level/common_lateload/talon_v2
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/abductor
name = "OM Ship - Abductor Ship (New Z)"
desc = "A ship for spooky aliens to kidnap farmers and unfortunate spacemen."
mappath = 'abductor.dmm'
mappath = "maps/offmap_vr/om_ships/abductor.dmm"
/area/abductor
requires_power = 0
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/aro
name = "OM Ship - Aronai (New Z)"
desc = "It's Aronai! As a spaceship."
mappath = 'aro.dmm'
mappath = "maps/offmap_vr/om_ships/aro.dmm"
// The shuttle's area(s)
/area/ship/aro
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/aro2
name = "OM Ship - Aronai 2.0 (New Z)"
desc = "It's Aronai! As a spaceship."
mappath = 'aro2.dmm'
mappath = "maps/offmap_vr/om_ships/aro2.dmm"
/area/aro2
requires_power = 1
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/aro3
name = "OM Ship - Aronai 3.0 (New Z)"
desc = "It's Aronai! As a spaceship."
mappath = 'aro3.dmm'
mappath = "maps/offmap_vr/om_ships/aro3.dmm"
/area/aro3
requires_power = 1
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/bearcat
name = "OM Ship - Bearcat (New Z)"
desc = "An old salvage ship, abandoned but seemingly intact."
mappath = 'bearcat.dmm'
mappath = "maps/offmap_vr/om_ships/bearcat.dmm"
// The 'shuttle'
/datum/shuttle/autodock/overmap/bearcat
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/curabiturmedical
name = "OM Ship - Curabitur Rescue Shuttle (new Z)"
desc = "A small corporate rescue shuttle."
mappath = 'curashuttle.dmm'
mappath = "maps/offmap_vr/om_ships/curashuttle.dmm"
annihilate = TRUE
// The shuttle's area(s)
+3 -3
View File
@@ -8,19 +8,19 @@
/datum/map_template/om_ships/gecko_stationhopper
name = "OM Ship - Gecko Stationhopper (new Z)"
desc = "A medium personnel transport shuttle."
mappath = 'gecko_sh.dmm'
mappath = "maps/offmap_vr/om_ships/gecko_sh.dmm"
annihilate = TRUE
/datum/map_template/om_ships/gecko_cargohauler
name = "OM Ship - Gecko Cargo Hauler (new Z)"
desc = "A medium supply transport shuttle."
mappath = 'gecko_cr.dmm'
mappath = "maps/offmap_vr/om_ships/gecko_cr.dmm"
annihilate = TRUE
/datum/map_template/om_ships/gecko_cargohauler_wreck
name = "OM Ship - Wrecked Gecko Cargo Hauler (new Z)"
desc = "A wrecked medium supply transport shuttle."
mappath = 'gecko_cr_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/gecko_cr_wreck.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/hybrid
name = "OM Ship - Generic Shuttle"
desc = "A small privately-owned vessel."
mappath = 'generic_shuttle.dmm'
mappath = "maps/offmap_vr/om_ships/generic_shuttle.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/hybrid
name = "OM Ship - Hybrid Shuttle"
desc = "A prototype human/alien tech hybrid shuttle."
mappath = 'hybridshuttle.dmm'
mappath = "maps/offmap_vr/om_ships/hybridshuttle.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/itglight
name = "OM Ship - ITG Dauntless (New Z)"
desc = "A small, well armed interstellar cargo ship!!"
mappath = 'itglight.dmm'
mappath = "maps/offmap_vr/om_ships/itglight.dmm"
/area/itglight
requires_power = 1
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/lunaship
name = "OM Ship - LUNA"
desc = "It's LUNA! As a spaceship."
mappath = 'lunaship.dmm'
mappath = "maps/offmap_vr/om_ships/lunaship.dmm"
/area/lunaship
requires_power = 1
+5 -5
View File
@@ -11,31 +11,31 @@
/datum/map_template/om_ships/mackerel_stationhopper
name = "OM Ship - Mackerel Stationhopper (new Z)"
desc = "A small personnel transport shuttle."
mappath = 'mackerel_sh.dmm'
mappath = "maps/offmap_vr/om_ships/mackerel_sh.dmm"
annihilate = TRUE
/datum/map_template/om_ships/mackerel_lightcargo
name = "OM Ship - Mackerel Light Cargo (new Z)"
desc = "A small light cargo transport shuttle."
mappath = 'mackerel_lc.dmm'
mappath = "maps/offmap_vr/om_ships/mackerel_lc.dmm"
annihilate = TRUE
/datum/map_template/om_ships/mackerel_heavycargo
name = "OM Ship - Mackerel Heavy Cargo (new Z)"
desc = "A small secure cargo transport shuttle."
mappath = 'mackerel_hc.dmm'
mappath = "maps/offmap_vr/om_ships/mackerel_hc.dmm"
annihilate = TRUE
/datum/map_template/om_ships/mackerel_heavycargo_skel
name = "OM Ship - Mackerel Heavy Cargo Spartanized (new Z)"
desc = "A small heavy cargo transport shuttle."
mappath = 'mackerel_hc_skel.dmm'
mappath = "maps/offmap_vr/om_ships/mackerel_hc_skel.dmm"
annihilate = TRUE
/datum/map_template/om_ships/mackerel_lightcargo_wreck
name = "OM Ship - Mackerel Light Cargo Wreck (new Z)"
desc = "A small light cargo transport shuttle, struck by... something. Ouch."
mappath = 'mackerel_lc_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -8,7 +8,7 @@
/datum/map_template/om_ships/syndicatecarrier
name = "OM Ship - Generic Cruiser (New Z)"
desc = "Mercenary Ship."
mappath = 'mercship.dmm'
mappath = "maps/offmap_vr/om_ships/mercship.dmm"
// The ship's area(s)
/area/ship/mercenary
+2 -2
View File
@@ -7,14 +7,14 @@
/datum/map_template/om_ships/salamander
name = "OM Ship - Salamander Corvette"
desc = "A medium multirole spacecraft."
mappath = 'salamander.dmm'
mappath = "maps/offmap_vr/om_ships/salamander.dmm"
annihilate = TRUE
// Map template for spawning the shuttle
/datum/map_template/om_ships/salamander_wreck
name = "OM Ship - Salamander Corvette Wreckage"
desc = "A medium multirole spacecraft, or at least what's left of it."
mappath = 'salamander_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/salamander_wreck.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/screebarge
name = "OM Ship - Battle Barge"
desc = "The BATTLE BARGE."
mappath = 'screebarge.dmm'
mappath = "maps/offmap_vr/om_ships/screebarge.dmm"
annihilate = TRUE
// The shuttle's area(s)
+3 -3
View File
@@ -9,19 +9,19 @@
/datum/map_template/om_ships/sdf_corvette
name = "OM Ship - SDF Corvette (new Z)"
desc = "A small SDF patrol corvette."
mappath = 'sdf_corvette.dmm'
mappath = "maps/offmap_vr/om_ships/sdf_corvette.dmm"
annihilate = TRUE
/datum/map_template/om_ships/sdf_corvette_wreck
name = "OM Ship - SDF Corvette Wreck (new Z)"
desc = "A small SD patrol corvette. It seems to have had a bad day."
mappath = 'sdf_corvette_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/sdf_corvette_wreck.dmm"
annihilate = TRUE
/datum/map_template/om_ships/sdf_corvette
name = "OM Ship - SDF Cutter (new Z)"
desc = "A small SDF cutter, outfitted with an ORB/OFD."
mappath = 'sdf_cutter.dmm'
mappath = "maps/offmap_vr/om_ships/sdf_cutter.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/escapepod
name = "OM Ship - Escape Pod"
desc = "An escape pod."
mappath = 'shelter_5.dmm'
mappath = "maps/offmap_vr/om_ships/shelter_5.dmm"
annihilate = TRUE
// The shuttle's area(s)
+1 -1
View File
@@ -7,7 +7,7 @@
/datum/map_template/om_ships/vespa
name = "OM Ship - Vespa (New Z)"
desc = "The Vespa, a Hephaestus Industries vessel."
mappath = 'vespa.dmm'
mappath = "maps/offmap_vr/om_ships/vespa.dmm"
// The shuttle's area(s)
/area/ship/expe
+26 -26
View File
@@ -111,7 +111,7 @@
/datum/map_template/om_adventure/outdoor/darkstar
name = "Darkstar"
desc = "A mysterious shape!"
mappath = 'pois/darkstar.dmm'
mappath = "maps/om_adventure/pois/darkstar.dmm"
cost = 5
/area/om_adventure/poi/darktear1
@@ -120,7 +120,7 @@
/datum/map_template/om_adventure/cave/darktear1
name = "darktear1"
desc = "A mysterious shape!"
mappath = 'pois/darktear1.dmm'
mappath = "maps/om_adventure/pois/darktear1.dmm"
cost = 5
/area/om_adventure/poi/darktear2
@@ -129,7 +129,7 @@
/datum/map_template/om_adventure/cave/darktear2
name = "darktear2"
desc = "A mysterious shape!"
mappath = 'pois/darktear2.dmm'
mappath = "maps/om_adventure/pois/darktear2.dmm"
cost = 5
/area/om_adventure/poi/darktear3
@@ -138,7 +138,7 @@
/datum/map_template/om_adventure/cave/darktear3
name = "darktear3"
desc = "A mysterious shape!"
mappath = 'pois/darktear3.dmm'
mappath = "maps/om_adventure/pois/darktear3.dmm"
cost = 5
/area/om_adventure/poi/darktear4
@@ -147,7 +147,7 @@
/datum/map_template/om_adventure/cave/darktear4
name = "darktear4"
desc = "A mysterious shape!"
mappath = 'pois/darktear4.dmm'
mappath = "maps/om_adventure/pois/darktear4.dmm"
cost = 5
/area/om_adventure/poi/darktear_sample
@@ -156,7 +156,7 @@
/datum/map_template/om_adventure/cave/darktear_sample
name = "darktear (Samples)" //1 uncommon-or-rare sample
desc = "Ooh, spooky"
mappath = 'pois/darktear_sample.dmm'
mappath = "maps/om_adventure/pois/darktear_sample.dmm"
cost = 5
/area/om_adventure/poi/fleshtear1
@@ -165,7 +165,7 @@
/datum/map_template/om_adventure/cave/fleshtear1
name = "fleshtear1"
desc = "Wow gross!"
mappath = 'pois/fleshtear1.dmm'
mappath = "maps/om_adventure/pois/fleshtear1.dmm"
cost = 5
/area/om_adventure/poi/fleshtear2
@@ -174,7 +174,7 @@
/datum/map_template/om_adventure/cave/fleshtear2
name = "fleshtear2"
desc = "Wow gross!"
mappath = 'pois/fleshtear2.dmm'
mappath = "maps/om_adventure/pois/fleshtear2.dmm"
cost = 5
/area/om_adventure/poi/fleshtear3
@@ -183,7 +183,7 @@
/datum/map_template/om_adventure/cave/fleshtear3
name = "fleshtear3"
desc = "Wow gross!"
mappath = 'pois/fleshtear3.dmm'
mappath = "maps/om_adventure/pois/fleshtear3.dmm"
cost = 5
/area/om_adventure/poi/fleshtear4
@@ -192,7 +192,7 @@
/datum/map_template/om_adventure/cave/fleshtear4
name = "fleshtear4"
desc = "Wow gross!"
mappath = 'pois/fleshtear4.dmm'
mappath = "maps/om_adventure/pois/fleshtear4.dmm"
cost = 5
/area/om_adventure/poi/fleshtear_samples
@@ -201,7 +201,7 @@
/datum/map_template/om_adventure/cave/fleshtear_samples
name = "fleshtear (Samples)" //3 common/uncommon samples
desc = "Ooh, meaty"
mappath = 'pois/fleshtear_samples.dmm'
mappath = "maps/om_adventure/pois/fleshtear_samples.dmm"
cost = 5
/area/om_adventure/poi/cabin1
@@ -210,7 +210,7 @@
/datum/map_template/om_adventure/outdoor/cabin1
name = "cabin1"
desc = "A comfy home!"
mappath = 'pois/cabin1.dmm'
mappath = "maps/om_adventure/pois/cabin1.dmm"
cost = 20
/area/om_adventure/poi/cabin2
@@ -219,7 +219,7 @@
/datum/map_template/om_adventure/outdoor/cabin2
name = "cabin2"
desc = "A comfy home!"
mappath = 'pois/cabin2.dmm'
mappath = "maps/om_adventure/pois/cabin2.dmm"
cost = 20
/area/om_adventure/poi/cabin3
@@ -228,7 +228,7 @@
/datum/map_template/om_adventure/outdoor/cabin3
name = "cabin3"
desc = "A comfy... home?"
mappath = 'pois/cabin3.dmm'
mappath = "maps/om_adventure/pois/cabin3.dmm"
cost = 10
/area/om_adventure/poi/camp
@@ -237,7 +237,7 @@
/datum/map_template/om_adventure/outdoor/camp
name = "Camp"
desc = "A camp!"
mappath = 'pois/camp.dmm'
mappath = "maps/om_adventure/pois/camp.dmm"
cost = 20
/area/om_adventure/poi/shuttlewreck1
@@ -246,7 +246,7 @@
/datum/map_template/om_adventure/outdoor/shuttlewreck1
name = "Shuttle wreck"
desc = "Long abandoned!"
mappath = 'pois/shuttlewreck1.dmm'
mappath = "maps/om_adventure/pois/shuttlewreck1.dmm"
cost = 5
/area/om_adventure/poi/shuttlewreck2
@@ -255,7 +255,7 @@
/datum/map_template/om_adventure/outdoor/shuttlewreck2
name = "Shuttle wreck"
desc = "Long abandoned!"
mappath = 'pois/shuttlewreck2.dmm'
mappath = "maps/om_adventure/pois/shuttlewreck2.dmm"
cost = 10
/area/om_adventure/poi/shuttlewreck3
@@ -264,7 +264,7 @@
/datum/map_template/om_adventure/outdoor/shuttlewreck3
name = "Shuttle wreck"
desc = "Long abandoned!"
mappath = 'pois/shuttlewreck3.dmm'
mappath = "maps/om_adventure/pois/shuttlewreck3.dmm"
cost = 5
/area/om_adventure/poi/shuttlewreck4
@@ -273,7 +273,7 @@
/datum/map_template/om_adventure/outdoor/shuttlewreck4
name = "Shuttle wreck"
desc = "Long abandoned!"
mappath = 'pois/shuttlewreck4.dmm'
mappath = "maps/om_adventure/pois/shuttlewreck4.dmm"
cost = 10
/area/om_adventure/poi/medicalcenter
@@ -282,7 +282,7 @@
/datum/map_template/om_adventure/outdoor/medicalcenter
name = "Medical Center"
desc = "Maybe they used to heal people here."
mappath = 'pois/medicalcenter.dmm'
mappath = "maps/om_adventure/pois/medicalcenter.dmm"
cost = 10
/area/om_adventure/poi/shippart1
@@ -291,7 +291,7 @@
/datum/map_template/om_adventure/outdoor/shippart1
name = "Ship Part"
desc = "Something bad happened here."
mappath = 'pois/shippart1.dmm'
mappath = "maps/om_adventure/pois/shippart1.dmm"
cost = 10
/area/om_adventure/poi/woodentemple
@@ -300,7 +300,7 @@
/datum/map_template/om_adventure/cave/woodentemple
name = "Wooden Temple"
desc = "A comfy wooden temple."
mappath = 'pois/woodentemple.dmm'
mappath = "maps/om_adventure/pois/woodentemple.dmm"
cost = 10
/area/om_adventure/poi/alienchamber1
@@ -309,7 +309,7 @@
/datum/map_template/om_adventure/cave/alienchamber1
name = "Alien Chamber"
desc = "A mysterious alien chamber!"
mappath = 'pois/alienchamber1.dmm'
mappath = "maps/om_adventure/pois/alienchamber1.dmm"
cost = 10
/area/om_adventure/poi/alienchamber2
@@ -318,7 +318,7 @@
/datum/map_template/om_adventure/cave/alienchamber2
name = "Alien Chamber"
desc = "A mysterious alien chamber!"
mappath = 'pois/alienchamber2.dmm'
mappath = "maps/om_adventure/pois/alienchamber2.dmm"
cost = 10
/area/om_adventure/poi/alienchamber3
@@ -327,7 +327,7 @@
/datum/map_template/om_adventure/cave/alienchamber3
name = "Alien Chamber"
desc = "A mysterious alien chamber!"
mappath = 'pois/alienchamber3.dmm'
mappath = "maps/om_adventure/pois/alienchamber3.dmm"
cost = 10
/area/om_adventure/poi/alienchamber4
@@ -336,7 +336,7 @@
/datum/map_template/om_adventure/cave/alienchamber4
name = "Alien Chamber"
desc = "A mysterious alien chamber!"
mappath = 'pois/alienchamber4.dmm'
mappath = "maps/om_adventure/pois/alienchamber4.dmm"
cost = 10
/obj/tether_away_spawner/spookyland
@@ -321,7 +321,7 @@
/datum/map_template/ship_lateload/ship_centcom
name = "Ship - Central Command"
desc = "Central Command lives here!"
mappath = 'ship_centcom.dmm'
mappath = "maps/stellar_delight/ship_centcom.dmm"
associated_map_datum = /datum/map_z_level/ship_lateload/ship_centcom
@@ -337,7 +337,7 @@
/datum/map_template/ship_lateload/ship_misc
name = "Ship - Misc"
desc = "Misc areas, like some transit areas, holodecks, merc area."
mappath = 'ship_misc.dmm'
mappath = "maps/stellar_delight/ship_misc.dmm"
associated_map_datum = /datum/map_z_level/ship_lateload/misc
@@ -350,7 +350,7 @@
/datum/map_template/ship_lateload/space_rocks
name = "V3b Asteroid Field"
desc = "Space debris is common in V3b's orbit due to the proximity of Virgo 3"
mappath = 'maps/submaps/space_rocks/space_rocks.dmm'
mappath = "maps/submaps/space_rocks/space_rocks.dmm"
associated_map_datum = /datum/map_z_level/ship_lateload/space_rocks
@@ -369,7 +369,7 @@
/datum/map_template/ship_lateload/overmap
name = "Overmap"
desc = "Overmap lives here :3"
mappath = 'overmap.dmm'
mappath = "maps/stellar_delight/overmap.dmm"
associated_map_datum = /datum/map_z_level/ship_lateload/overmap
@@ -382,5 +382,5 @@
/datum/map_template/common_lateload/away_aerostat
name = "Remmi Aerostat - Z1 Aerostat"
desc = "The Virgo 2 Aerostat away mission."
mappath = 'maps/expedition_vr/aerostat/aerostat_science_outpost.dmm'
mappath = "maps/expedition_vr/aerostat/aerostat_science_outpost.dmm"
associated_map_datum = /datum/map_z_level/common_lateload/away_aerostat
+1 -1
View File
@@ -8,7 +8,7 @@
/datum/map_template/om_ships/ert_ship
name = "OM Ship - ERT Ship (New Z)"
desc = "NT Emergency Response Ship."
mappath = 'ert.dmm'
mappath = "maps/submaps/admin_use_vr/ert.dmm"
// The ship's area(s)
/area/ship/ert
@@ -6,7 +6,7 @@
/datum/map_template/om_ships/event_autonomous_drone
name = "OM Ship - Cargo Drone"
desc = "A small cargo hauler"
mappath = 'event_autonomous_drone.dmm'
mappath = "maps/submaps/admin_use_vr/event_autonomous_drone.dmm"
annihilate = TRUE
/datum/shuttle/autodock/overmap/event_autonomous_drone
+1 -1
View File
@@ -11,7 +11,7 @@
/datum/map_template/admin_use/casino
name = "Lucky 7 Casino"
desc = "A casino to gamble your life away."
mappath = 'maps/submaps/admin_use_vr/lucky_7.dmm'
mappath = "maps/submaps/admin_use_vr/lucky_7.dmm"
// NEVER EVER use these on an actual included map.
// These are for admins to use when they make quick maps and upload the .dmm files for loading
+1 -1
View File
@@ -8,7 +8,7 @@
/datum/map_template/om_ships/manta_ship
name = "OM Ship - Mercenary Cruiser (New Z)"
desc = "Mercenary Manta Cruiser."
mappath = 'kk_mercship.dmm'
mappath = "maps/submaps/admin_use_vr/kk_mercship.dmm"
// The ship's area(s)
/area/ship/manta
+5 -5
View File
@@ -1,25 +1,25 @@
/datum/map_template/admin_use/old_mercenary
name = "Special Area - Old Merc Base"
desc = "So much red!"
mappath = 'maps/submaps/admin_use_vr/mercbase.dmm'
mappath = "maps/submaps/admin_use_vr/mercbase.dmm"
/datum/map_template/admin_use/ert
name = "Special Area - ERT"
desc = "ERT Base."
mappath = 'maps/submaps/admin_use_vr/ert_base.dmm'
mappath = "maps/submaps/admin_use_vr/ert_base.dmm"
// Old two-Z Talon - left commented out because multi-z maploading is fussy or something IIRC
/*
/datum/map_template/tether_lateload/offmap/talon1
name = "Offmap Ship - Talon Z1"
desc = "Offmap spawn ship, the Talon."
mappath = 'maps/submaps/depreciated_vr/talon/talon1.dmm'
mappath = "maps/submaps/depreciated_vr/talon/talon1.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/talon1
/datum/map_template/tether_lateload/offmap/talon2
name = "Offmap Ship - Talon Z2"
desc = "Offmap spawn ship, the Talon."
mappath = 'maps/submaps/depreciated_vr/talon/talon2.dmm'
mappath = "maps/submaps/depreciated_vr/talon/talon2.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/talon2
/datum/map_z_level/tether_lateload/talon1
@@ -33,4 +33,4 @@
flags = MAP_LEVEL_PLAYER
base_turf = /turf/simulated/open
z = Z_LEVEL_OFFMAP2
*/
*/
@@ -18,19 +18,19 @@
/datum/map_template/engine/rust
name = "R-UST Engine"
desc = "R-UST Fusion Tokamak Engine"
mappath = 'maps/submaps/engine_submaps/southern_cross/engine_rust.dmm'
mappath = "maps/submaps/engine_submaps/southern_cross/engine_rust.dmm"
/datum/map_template/engine/singulo
name = "Singularity Engine"
desc = "Lord Singuloth"
mappath = 'maps/submaps/engine_submaps/southern_cross/engine_singulo.dmm'
mappath = "maps/submaps/engine_submaps/southern_cross/engine_singulo.dmm"
/datum/map_template/engine/supermatter
name = "Supermatter Engine"
desc = "Old Faithful Supermatter"
mappath = 'maps/submaps/engine_submaps/southern_cross/engine_sme.dmm'
mappath = "maps/submaps/engine_submaps/southern_cross/engine_sme.dmm"
/datum/map_template/engine/tesla
name = "Edison's Bane"
desc = "The Telsa Engine"
mappath = 'maps/submaps/engine_submaps/southern_cross/engine_tesla.dmm'
mappath = "maps/submaps/engine_submaps/southern_cross/engine_tesla.dmm"
@@ -1,4 +1,4 @@
// This causes engine maps to get 'checked' and compiled, when undergoing a unit test.
// This causes engine maps to get 'checked' and compiled, when undergoing a unit test.
// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors.
// When adding a new engine, please add it to this list.
#ifdef MAP_TEST
@@ -17,19 +17,19 @@
/datum/map_template/engine/rust
name = "R-UST Engine"
desc = "R-UST Fusion Tokamak Engine"
mappath = 'maps/submaps/engine_submaps_vr/tether/engine_rust.dmm'
mappath = "maps/submaps/engine_submaps_vr/tether/engine_rust.dmm"
/datum/map_template/engine/singulo
name = "Singularity Engine"
desc = "Lord Singuloth"
mappath = 'maps/submaps/engine_submaps_vr/tether/engine_singulo.dmm'
mappath = "maps/submaps/engine_submaps_vr/tether/engine_singulo.dmm"
/datum/map_template/engine/supermatter
name = "Supermatter Engine"
desc = "Old Faithful Supermatter"
mappath = 'maps/submaps/engine_submaps_vr/tether/engine_sme.dmm'
mappath = "maps/submaps/engine_submaps_vr/tether/engine_sme.dmm"
/datum/map_template/engine/tesla
name = "Edison's Bane"
desc = "The Telsa Engine"
mappath = 'maps/submaps/engine_submaps_vr/tether/engine_tesla.dmm'
mappath = "maps/submaps/engine_submaps_vr/tether/engine_tesla.dmm"
+27 -27
View File
@@ -38,170 +38,170 @@
/datum/map_template/virgo2/Flake
name = "Forest Lake"
desc = "A serene lake sitting amidst the surface."
mappath = 'Flake.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Flake.dmm"
cost = 10
/datum/map_template/virgo2/Mcamp1
name = "Military Camp 1"
desc = "A derelict military camp host to some unsavory dangers"
mappath = 'MCamp1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/MCamp1.dmm"
cost = 5
/datum/map_template/virgo2/Mudpit
name = "Mudpit"
desc = "What happens when someone is a bit too careless with gas.."
mappath = 'Mudpit.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Mudpit.dmm"
cost = 5
/datum/map_template/virgo2/Rocky1
name = "Rocky1"
desc = "DununanununanununuNAnana"
mappath = 'Rocky1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Rocky1.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/virgo2/RareSample
name = "Rocky1"
desc = "Ooh, shiny!" //a single rare sample, sitting in the open
mappath = 'RareSample.dmm'
mappath = "maps/submaps/pois_vr/aerostat/RareSample.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/virgo2/SamplePocket
name = "Sampleroid"
desc = "What's in the (rock)box?" //one common/uncommon, one uncommon/rare, and one any grade
mappath = 'SamplePocket.dmm'
mappath = "maps/submaps/pois_vr/aerostat/SamplePocket.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/virgo2/Shack1
name = "Shack1"
desc = "A small shack in the middle of nowhere, Your halloween murder happens here"
mappath = 'Shack1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Shack1.dmm"
cost = 5
/datum/map_template/virgo2/Smol1
name = "Smol1"
desc = "A tiny grove of trees, The Nemesis of thicc"
mappath = 'Smol1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Smol1.dmm"
cost = 5
/datum/map_template/virgo2/Snowrock1
name = "Snowrock1"
desc = "A rocky snow covered area"
mappath = 'Snowrock1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Snowrock1.dmm"
cost = 5
/datum/map_template/virgo2/Lab1
name = "Lab1"
desc = "An isolated small robotics lab."
mappath = 'Lab1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Lab1.dmm"
cost = 5
/datum/map_template/virgo2/Rocky4
name = "Rocky4"
desc = "An interesting geographic formation."
mappath = 'Rocky4.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Rocky4.dmm"
cost = 5
/datum/map_template/virgo2/DJOutpost1
name = "DJOutpost1"
desc = "Home of Sif Free Radio, the best - and only - radio station for miles around."
mappath = 'DJOutpost1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/DJOutpost1.dmm"
template_group = "Sif Free Radio"
cost = 5
/datum/map_template/virgo2/DJOutpost2
name = "DJOutpost2"
desc = "The cratered remains of Sif Free Radio, the best - and only - radio station for miles around."
mappath = 'DJOutpost2.dmm'
mappath = "maps/submaps/pois_vr/aerostat/DJOutpost2.dmm"
template_group = "Sif Free Radio"
cost = 5
/datum/map_template/virgo2/Boombase
name = "Boombase"
desc = "What happens when you don't follow SOP."
mappath = 'Boombase.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Boombase.dmm"
cost = 5
/*
/datum/map_template/virgo2/BSD
name = "Black Shuttle Down"
desc = "You REALLY shouldn't be near this."
mappath = 'Blackshuttledown.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Blackshuttledown.dmm"
cost = 30
*/
/datum/map_template/virgo2/Rockybase
name = "Rocky Base"
desc = "A guide to upsetting Icarus and the EIO"
mappath = 'Rockybase.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Rockybase.dmm"
cost = 35
/datum/map_template/virgo2/MHR
name = "Manhack Rock"
desc = "A rock filled with nasty Synthetics."
mappath = 'MHR.dmm'
mappath = "maps/submaps/pois_vr/aerostat/MHR.dmm"
cost = 15
/datum/map_template/virgo2/GovPatrol
name = "Government Patrol"
desc = "A long lost SifGuard ground survey patrol. Now they have you guys!"
mappath = 'GovPatrol.dmm'
mappath = "maps/submaps/pois_vr/aerostat/GovPatrol.dmm"
cost = 5
/datum/map_template/virgo2/DecoupledEngine
name = "Decoupled Engine"
desc = "A damaged fission engine jettisoned from a starship long ago."
mappath = 'DecoupledEngine.dmm'
mappath = "maps/submaps/pois_vr/aerostat/DecoupledEngine.dmm"
cost = 15
/*
/datum/map_template/virgo2/DoomP
name = "DoomP"
desc = "Witty description here."
mappath = 'DoomP.dmm'
mappath = "maps/submaps/pois_vr/aerostat/DoomP.dmm"
cost = 30
*/
/datum/map_template/virgo2/Cave
name = "CaveS"
desc = "Chitter chitter!"
mappath = 'CaveS.dmm'
mappath = "maps/submaps/pois_vr/aerostat/CaveS.dmm"
cost = 20
/datum/map_template/virgo2/Drugden
name = "Drugden"
desc = "The remains of ill thought out whims."
mappath = 'Drugden.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Drugden.dmm"
cost = 20
/datum/map_template/virgo2/Musk
name = "Musk"
desc = "0 to 60 in 1.9 seconds."
mappath = 'Musk.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Musk.dmm"
cost = 10
/datum/map_template/virgo2/Manor1
name = "Manor1"
desc = "Whodunit"
mappath = 'Manor1.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Manor1.dmm"
cost = 20
/datum/map_template/virgo2/Epod3
name = "Emergency Pod 3"
desc = "A webbed Emergency pod in the middle of nowhere."
mappath = 'Epod3.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Epod3.dmm"
cost = 5
/datum/map_template/virgo2/Epod4
name = "Emergency Pod 4"
desc = "A flooded Emergency pod in the middle of nowhere."
mappath = 'Epod4.dmm'
mappath = "maps/submaps/pois_vr/aerostat/Epod4.dmm"
cost = 5
/datum/map_template/virgo2/ButcherShack
name = "Butcher Shack"
desc = "An old, bloody butcher's shack. Get your meat here!"
mappath = 'butchershack.dmm'
mappath = "maps/submaps/pois_vr/aerostat/butchershack.dmm"
cost = 5
+57 -57
View File
@@ -5,317 +5,317 @@
/datum/map_template/debrisfield/asteroids1
name = "Asteroids 1"
mappath = 'asteroids1.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids1.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids2
name = "Asteroids 2"
mappath = 'asteroids2.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids2.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids3
name = "Asteroids 3"
mappath = 'asteroids3.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids3.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids4
name = "Asteroids 4"
mappath = 'asteroids4.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids4.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids5
name = "Asteroids 5"
mappath = 'asteroids5.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids5.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids6
name = "Asteroids 6"
mappath = 'asteroids6.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids6.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids7
name = "Asteroids 7"
mappath = 'asteroids7.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids7.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids8
name = "Asteroids 8"
mappath = 'asteroids8.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids8.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids9
name = "Asteroids 9"
mappath = 'asteroids9.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids9.dmm"
cost = 2
/datum/map_template/debrisfield/asteroids10
name = "Asteroids 10"
mappath = 'asteroids10.dmm'
mappath = "maps/submaps/pois_vr/debris_field/asteroids10.dmm"
cost = 2
/datum/map_template/debrisfield/sampleroid1 //2 common/uncommon samples
name = "Samples Rock 1"
mappath = 'sample_asteroid1.dmm'
mappath = "maps/submaps/pois_vr/debris_field/sample_asteroid1.dmm"
cost = 5
/datum/map_template/debrisfield/sampleroid2 //cluster of 3 commons
name = "Samples Rock 2"
mappath = 'sample_asteroid2.dmm'
mappath = "maps/submaps/pois_vr/debris_field/sample_asteroid2.dmm"
cost = 5
/datum/map_template/debrisfield/sampleroid3 //single rare surrounded by rock
name = "Samples Rock 3"
mappath = 'sample_asteroid3.dmm'
mappath = "maps/submaps/pois_vr/debris_field/sample_asteroid3.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids1
name = "Carp Asteroids 1"
mappath = 'carp_asteroids1.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids1.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids2
name = "Carp Asteroids 2"
mappath = 'carp_asteroids2.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids2.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids3
name = "Carp Asteroids 3"
mappath = 'carp_asteroids3.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids3.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids4
name = "Carp Asteroids 4"
mappath = 'carp_asteroids4.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids4.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids5
name = "Carp Asteroids 5"
mappath = 'carp_asteroids5.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids5.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids6
name = "Carp Asteroids 6"
mappath = 'carp_asteroids6.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids6.dmm"
cost = 5
/datum/map_template/debrisfield/carp_asteroids7
name = "Carp Asteroids 7"
mappath = 'carp_asteroids7.dmm'
mappath = "maps/submaps/pois_vr/debris_field/carp_asteroids7.dmm"
cost = 5
/datum/map_template/debrisfield/foodstand
name = "Food Stand"
mappath = 'foodstand.dmm'
mappath = "maps/submaps/pois_vr/debris_field/foodstand.dmm"
cost = 20
allow_duplicates = FALSE
/datum/map_template/debrisfield/debris1
name = "Debris 1"
mappath = 'debris1.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris1.dmm"
cost = 2
/datum/map_template/debrisfield/debris2
name = "Debris 2"
mappath = 'debris2.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris2.dmm"
cost = 2
/datum/map_template/debrisfield/debris3
name = "Debris 3"
mappath = 'debris3.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris3.dmm"
cost = 2
/datum/map_template/debrisfield/debris4
name = "Debris 4"
mappath = 'debris4.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris4.dmm"
cost = 2
/datum/map_template/debrisfield/debris5
name = "Debris 5"
mappath = 'debris5.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris5.dmm"
cost = 2
/datum/map_template/debrisfield/debris6
name = "Debris 6"
mappath = 'debris6.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris6.dmm"
cost = 2
/datum/map_template/debrisfield/debris7
name = "Debris 7"
mappath = 'debris7.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris7.dmm"
cost = 2
/datum/map_template/debrisfield/debris8
name = "Debris 8"
mappath = 'debris8.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris8.dmm"
cost = 2
/datum/map_template/debrisfield/debris9
name = "Debris 9"
mappath = 'debris9.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris9.dmm"
cost = 2
/datum/map_template/debrisfield/debris10
name = "Debris 10"
mappath = 'debris10.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris10.dmm"
cost = 2
/datum/map_template/debrisfield/debris11
name = "Debris 11"
mappath = 'debris11.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris11.dmm"
cost = 2
/datum/map_template/debrisfield/debris12
name = "Debris 12"
mappath = 'debris12.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris12.dmm"
cost = 2
/datum/map_template/debrisfield/debris13
name = "Debris 13"
mappath = 'debris13.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris13.dmm"
cost = 2
/datum/map_template/debrisfield/debris14
name = "Debris 14"
mappath = 'debris14.dmm'
mappath = "maps/submaps/pois_vr/debris_field/debris14.dmm"
cost = 2
/datum/map_template/debrisfield/escape_pod
name = "Ancient Escape Pod"
mappath = 'escape_pod.dmm'
mappath = "maps/submaps/pois_vr/debris_field/escape_pod.dmm"
cost = 5
allow_duplicates = FALSE
/datum/map_template/debrisfield/old_satellite
name = "Old Satellite"
mappath = 'old_satellite.dmm'
mappath = "maps/submaps/pois_vr/debris_field/old_satellite.dmm"
cost = 10
allow_duplicates = FALSE
/datum/map_template/debrisfield/old_teleporter
name = "Old Teleporter"
mappath = 'old_teleporter.dmm'
mappath = "maps/submaps/pois_vr/debris_field/old_teleporter.dmm"
cost = 10
allow_duplicates = FALSE
/datum/map_template/debrisfield/old_mining_outpost
name = "Old Drone Mining Outpost"
mappath = 'mining_drones.dmm'
mappath = "maps/submaps/pois_vr/debris_field/mining_drones.dmm"
cost = 20
allow_duplicates = FALSE
/datum/map_template/debrisfield/ship_mining_drone
name = "Disabled Mining Drone Ship"
mappath = 'ship_mining_drone.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_mining_drone.dmm"
cost = 35
allow_duplicates = FALSE
/datum/map_template/debrisfield/ship_sup_exploded
name = "Exploded Cargo Ship"
mappath = 'ship_sup_exploded.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_sup_exploded.dmm"
cost = 35
allow_duplicates = FALSE
/datum/map_template/debrisfield/ship_med_crashed
name = "Crashed Medical Ship"
mappath = 'ship_med_crashed.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_med_crashed.dmm"
cost = 35
allow_duplicates = FALSE
/datum/map_template/debrisfield/ship_sci_overrun
name = "Overrun Research Ship"
mappath = 'ship_sci_overrun.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_sci_overrun.dmm"
cost = 35
allow_duplicates = FALSE
/datum/map_template/debrisfield/phoron_tanker
name = "Betrayed Phoron Tanker"
mappath = 'ship_tanker_betrayed.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_tanker_betrayed.dmm"
cost = 35
allow_duplicates = FALSE
/datum/map_template/debrisfield/ship_tourist_overrun
name = "Overrun private yacht"
mappath = 'ship_tourist_overrun.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_tourist_overrun.dmm"
cost = 35
allow_duplicates = FALSE
/datum/map_template/debrisfield/oldshuttle
name = "Old Expedition Shuttle"
mappath = 'oldshuttle.dmm'
mappath = "maps/submaps/pois_vr/debris_field/oldshuttle.dmm"
cost = 30
allow_duplicates = FALSE
/datum/map_template/debrisfield/tinycarrier
name = "Disabled Tiny Carrier"
mappath = 'tinycarrier.dmm'
mappath = "maps/submaps/pois_vr/debris_field/tinycarrier.dmm"
cost = 30
allow_duplicates = FALSE
/datum/map_template/debrisfield/alien_massive_derelict
name = "Alien Derelict"
mappath = 'derelict.dmm'
mappath = "maps/submaps/pois_vr/debris_field/derelict.dmm"
cost = 35
allow_duplicates = FALSE
discard_prob = 50
/datum/map_template/debrisfield/new_escape_pod
name = "Escape Pod"
mappath = 'new_escapepod.dmm'
mappath = "maps/submaps/pois_vr/debris_field/new_escapepod.dmm"
cost = 10
allow_duplicates = FALSE
discard_prob = 10
/datum/map_template/debrisfield/new_escape_pod_infested_xeno
name = "Xeno-Infested Escape Pod"
mappath = 'new_escapepod_xeno.dmm'
mappath = "maps/submaps/pois_vr/debris_field/new_escapepod_xeno.dmm"
cost = 20
allow_duplicates = FALSE
discard_prob = 25
/datum/map_template/debrisfield/new_escape_pod_infested_carp
name = "Carp-Infested Escape Pod"
mappath = 'new_escapepod_carp.dmm'
mappath = "maps/submaps/pois_vr/debris_field/new_escapepod_carp.dmm"
cost = 20
allow_duplicates = FALSE
discard_prob = 25
/datum/map_template/debrisfield/new_escape_pod_infested_robo
name = "Robo-Infested Escape Pod"
mappath = 'new_escapepod_robo.dmm'
mappath = "maps/submaps/pois_vr/debris_field/new_escapepod_robo.dmm"
cost = 20
allow_duplicates = FALSE
discard_prob = 25
/datum/map_template/debrisfield/gutted_mackerel
name = "Gutted Mackerel LC"
mappath = 'maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm"
cost = 35
allow_duplicates = FALSE
discard_prob = 25
/datum/map_template/debrisfield/wrecked_salamander
name = "Wrecked Salamander"
mappath = 'maps/offmap_vr/om_ships/salamander_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/salamander_wreck.dmm"
cost = 35
allow_duplicates = FALSE
discard_prob = 34
/datum/map_template/debrisfield/ruined_gecko
name = "Ruined Gecko CR"
mappath = 'maps/offmap_vr/om_ships/gecko_cr_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/gecko_cr_wreck.dmm"
cost = 45
allow_duplicates = FALSE
discard_prob = 50
/datum/map_template/debrisfield/blasted_sdf
name = "Blasted SDF Corvette"
mappath = 'maps/offmap_vr/om_ships/sdf_corvette_wreck.dmm'
mappath = "maps/offmap_vr/om_ships/sdf_corvette_wreck.dmm"
cost = 35
allow_duplicates = FALSE
discard_prob = 25
/datum/map_template/debrisfield/phoron_tanker
name = "Betrayed Phoron Tanker"
mappath = 'ship_tanker_betrayed.dmm'
mappath = "maps/submaps/pois_vr/debris_field/ship_tanker_betrayed.dmm"
cost = 35
allow_duplicates = FALSE
discard_prob = 25
+9 -9
View File
@@ -20,7 +20,7 @@
/datum/map_template/space_rocks/bittynest1
name = "Bittynest1"
desc = "A smol nest for smol badguys"
mappath = 'bittynest1.dmm'
mappath = "maps/submaps/space_rocks/bittynest1.dmm"
cost = 5
/area/submap/space_rocks/bittynest2
@@ -29,7 +29,7 @@
/datum/map_template/space_rocks/bittynest2
name = "Bittynest2"
desc = "A smol nest for smol badguys"
mappath = 'bittynest2.dmm'
mappath = "maps/submaps/space_rocks/bittynest2.dmm"
cost = 5
/area/submap/space_rocks/bittynest3
@@ -38,7 +38,7 @@
/datum/map_template/space_rocks/bittynest3
name = "Bittynest3"
desc = "A smol nest for smol badguys"
mappath = 'bittynest3.dmm'
mappath = "maps/submaps/space_rocks/bittynest3.dmm"
cost = 5
/area/submap/space_rocks/bittynest4
@@ -47,7 +47,7 @@
/datum/map_template/space_rocks/bittynest4
name = "Bittynest4"
desc = "A smol nest for smol badguys"
mappath = 'bittynest4.dmm'
mappath = "maps/submaps/space_rocks/bittynest4.dmm"
cost = 5
/area/submap/space_rocks/tunnel1
@@ -56,7 +56,7 @@
/datum/map_template/space_rocks/tunnel1
name = "Tunnel1"
desc = "A tunnel left behind!"
mappath = 'tunnel1.dmm'
mappath = "maps/submaps/space_rocks/tunnel1.dmm"
cost = 10
/area/submap/space_rocks/tunnel2
@@ -65,7 +65,7 @@
/datum/map_template/space_rocks/tunnel2
name = "Tunnel2"
desc = "A tunnel left behind!"
mappath = 'tunnel2.dmm'
mappath = "maps/submaps/space_rocks/tunnel2.dmm"
cost = 10
/area/submap/space_rocks/spacecrystals
@@ -74,7 +74,7 @@
/datum/map_template/space_rocks/tunnel2
name = "Space Crystals"
desc = "Some crystals living in space!"
mappath = 'spacecrystals.dmm'
mappath = "maps/submaps/space_rocks/spacecrystals.dmm"
cost = 10
/area/submap/space_rocks/clearing
@@ -83,7 +83,7 @@
/datum/map_template/space_rocks/clearing
name = "Clearing"
desc = "A clear spot for mischief to happen."
mappath = 'clearing.dmm'
mappath = "maps/submaps/space_rocks/clearing.dmm"
cost = 10
/area/submap/space_rocks/seventemple
@@ -92,5 +92,5 @@
/datum/map_template/space_rocks/seventemple
name = "Temple of the Seven"
desc = "A mysterious space!"
mappath = 'seventemple.dmm'
mappath = "maps/submaps/space_rocks/seventemple.dmm"
cost = 25
@@ -68,82 +68,82 @@
/datum/map_template/surface/mountains/normal/deadBeacon
name = "Abandoned Relay"
desc = "An unregistered comms relay, abandoned to the elements."
mappath = 'maps/submaps/surface_submaps/mountains/deadBeacon.dmm'
mappath = "maps/submaps/surface_submaps/mountains/deadBeacon.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/prepper1
name = "Prepper Bunker"
desc = "A little hideaway for someone with more time and money than sense."
mappath = 'maps/submaps/surface_submaps/mountains/prepper1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/prepper1.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/qshuttle
name = "Quarantined Shuttle"
desc = "An emergency landing turned viral outbreak turned tragedy."
mappath = 'maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm'
mappath = "maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/Mineshaft1
name = "Abandoned Mineshaft 1"
desc = "An abandoned minning tunnel from a lost money making effort."
mappath = 'maps/submaps/surface_submaps/mountains/Mineshaft1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Mineshaft1.dmm"
cost = 5
/datum/map_template/surface/mountains/normal/crystal1
name = "Crystal Cave 1"
desc = "A small cave with glowing gems and diamonds."
mappath = 'maps/submaps/surface_submaps/mountains/crystal1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/crystal1.dmm"
cost = 5
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/crystal2
name = "Crystal Cave 2"
desc = "A moderate sized cave with glowing gems and diamonds."
mappath = 'maps/submaps/surface_submaps/mountains/crystal2.dmm'
mappath = "maps/submaps/surface_submaps/mountains/crystal2.dmm"
cost = 10
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/crystal2
name = "Crystal Cave 3"
desc = "A large spiral of crystals with diamonds in the center."
mappath = 'maps/submaps/surface_submaps/mountains/crystal3.dmm'
mappath = "maps/submaps/surface_submaps/mountains/crystal3.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/lost_explorer
name = "Lost Explorer"
desc = "The remains of an explorer who rotted away ages ago, and their equipment."
mappath = 'maps/submaps/surface_submaps/mountains/lost_explorer.dmm'
mappath = "maps/submaps/surface_submaps/mountains/lost_explorer.dmm"
cost = 5
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/Rockb1
name = "Rocky Base 1"
desc = "Someones underground hidey hole"
mappath = 'maps/submaps/surface_submaps/mountains/Rockb1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Rockb1.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/corgiritual
name = "Dark Ritual"
desc = "Who put all these plushies here? What are they doing?"
mappath = 'maps/submaps/surface_submaps/mountains/ritual.dmm'
mappath = "maps/submaps/surface_submaps/mountains/ritual.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/abandonedtemple
name = "Abandoned Temple"
desc = "An ancient temple, long since abandoned. Perhaps alien in origin?"
mappath = 'maps/submaps/surface_submaps/mountains/temple.dmm'
mappath = "maps/submaps/surface_submaps/mountains/temple.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/digsite
name = "Dig Site"
desc = "A small abandoned dig site."
mappath = 'maps/submaps/surface_submaps/mountains/digsite.dmm'
mappath = "maps/submaps/surface_submaps/mountains/digsite.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/vault1
name = "Mine Vault 1"
desc = "A small vault with potential loot."
mappath = 'maps/submaps/surface_submaps/mountains/vault1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -151,7 +151,7 @@
/datum/map_template/surface/mountains/normal/vault2
name = "Mine Vault 2"
desc = "A small vault with potential loot."
mappath = 'maps/submaps/surface_submaps/mountains/vault2.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault2.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -159,56 +159,56 @@
/datum/map_template/surface/mountains/normal/vault3
name = "Mine Vault 3"
desc = "A small vault with potential loot. Also a horrible suprise."
mappath = 'maps/submaps/surface_submaps/mountains/vault3.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault3.dmm"
cost = 15
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/IceCave1A
name = "Ice Cave 1A"
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
mappath = 'maps/submaps/surface_submaps/mountains/IceCave1A.dmm'
mappath = "maps/submaps/surface_submaps/mountains/IceCave1A.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/IceCave1B
name = "Ice Cave 1B"
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
mappath = 'maps/submaps/surface_submaps/mountains/IceCave1B.dmm'
mappath = "maps/submaps/surface_submaps/mountains/IceCave1B.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/IceCave1C
name = "Ice Cave 1C"
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
mappath = 'maps/submaps/surface_submaps/mountains/IceCave1C.dmm'
mappath = "maps/submaps/surface_submaps/mountains/IceCave1C.dmm"
cost = 10
/datum/map_template/surface/mountains/normal/SwordCave
name = "Cursed Sword Cave"
desc = "An underground lake. The sword on the lake's island holds a terrible secret."
mappath = 'maps/submaps/surface_submaps/mountains/SwordCave.dmm'
mappath = "maps/submaps/surface_submaps/mountains/SwordCave.dmm"
/datum/map_template/surface/mountains/normal/supplydrop1
name = "Supply Drop 1"
desc = "A drop pod that landed deep within the mountains."
mappath = 'maps/submaps/surface_submaps/mountains/SupplyDrop1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/SupplyDrop1.dmm"
cost = 10
allow_duplicates = TRUE
/datum/map_template/surface/mountains/normal/crashedcontainmentshuttle
name = "Crashed Cargo Shuttle"
desc = "A severely damaged military shuttle, its cargo seems to remain intact."
mappath = 'maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle_vr.dmm" //VOREStation Edit
cost = 30
/datum/map_template/surface/mountains/normal/deadspy
name = "Spy Remains"
desc = "W+M1 = Salt."
mappath = 'maps/submaps/surface_submaps/mountains/deadspy.dmm'
mappath = "maps/submaps/surface_submaps/mountains/deadspy.dmm"
cost = 15
/datum/map_template/surface/mountains/normal/geyser1
name = "Ore-Rich Geyser"
desc = "A subterranean geyser that produces steam. This one has a particularly abundant amount of materials surrounding it."
mappath = 'maps/submaps/surface_submaps/mountains/Geyser1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Geyser1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Underground Geysers"
@@ -216,7 +216,7 @@
/datum/map_template/surface/mountains/normal/geyser2
name = "Fenced Geyser"
desc = "A subterranean geyser that produces steam. This one has a damaged fence surrounding it."
mappath = 'maps/submaps/surface_submaps/mountains/Geyser2.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Geyser2.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Underground Geysers"
@@ -224,7 +224,7 @@
/datum/map_template/surface/mountains/normal/geyser3
name = "Magmatic Geyser"
desc = "A subterranean geyser that produces incendiary gas. It is recessed into the ground, and filled with magma. It's a relatively dormant volcano."
mappath = 'maps/submaps/surface_submaps/mountains/Geyser2.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Geyser2.dmm"
cost = 10
allow_duplicates = TRUE
template_group = "Underground Geysers"
@@ -232,7 +232,7 @@
/datum/map_template/surface/mountains/normal/cliff1
name = "Ore-Topped Cliff"
desc = "A raised area of rock created by volcanic forces."
mappath = 'maps/submaps/surface_submaps/mountains/Cliff1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Cliff1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Underground Cliffs"
@@ -240,7 +240,7 @@
/datum/map_template/surface/mountains/normal/deadly_rabbit // VOREStation Edit
name = "The Killer Rabbit"
desc = "A cave where the Knights of the Round have fallen to a murderous Rabbit."
mappath = 'maps/submaps/surface_submaps/mountains/deadly_rabbit_vr.dmm'
mappath = "maps/submaps/surface_submaps/mountains/deadly_rabbit_vr.dmm"
cost = 5
allow_duplicates = FALSE
@@ -252,46 +252,46 @@
/datum/map_template/surface/mountains/deep/lost_explorer
name = "Lost Explorer, Deep"
desc = "The remains of an explorer who rotted away ages ago, and their equipment. Again."
mappath = 'maps/submaps/surface_submaps/mountains/lost_explorer.dmm'
mappath = "maps/submaps/surface_submaps/mountains/lost_explorer.dmm"
cost = 5
allow_duplicates = TRUE */
/datum/map_template/surface/mountains/normal/crashed_ufo //VOREStation Edit
name = "Crashed UFO"
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet it still seems to be running..."
mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo.dmm'
mappath = "maps/submaps/surface_submaps/mountains/crashed_ufo.dmm"
cost = 40
discard_prob = 50
/datum/map_template/surface/mountains/normal/crashed_ufo_frigate //VOREStation Edit
name = "Crashed UFO Frigate"
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet the combat protocols still seem to be running..."
mappath = 'maps/submaps/surface_submaps/mountains/crashed_ufo_frigate.dmm'
mappath = "maps/submaps/surface_submaps/mountains/crashed_ufo_frigate.dmm"
cost = 60
discard_prob = 50
/datum/map_template/surface/mountains/normal/Scave1 //VOREStation Edit
name = "Spider Cave 1"
desc = "A minning tunnel home to an aggressive collection of spiders."
mappath = 'maps/submaps/surface_submaps/mountains/Scave1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Scave1.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/CaveTrench //VOREStation Edit
name = "Cave River"
desc = "A strange underground river."
mappath = 'maps/submaps/surface_submaps/mountains/CaveTrench.dmm'
mappath = "maps/submaps/surface_submaps/mountains/CaveTrench.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/Cavelake //VOREStation Edit
name = "Cave Lake"
desc = "A large underground lake."
mappath = 'maps/submaps/surface_submaps/mountains/Cavelake.dmm'
mappath = "maps/submaps/surface_submaps/mountains/Cavelake.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/vault1 //VOREStation Edit
name = "Mine Vault 1"
desc = "A small vault with potential loot."
mappath = 'maps/submaps/surface_submaps/mountains/vault1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault1.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -299,7 +299,7 @@
/datum/map_template/surface/mountains/normal/vault2 //VOREStation Edit
name = "Mine Vault 2"
desc = "A small vault with potential loot."
mappath = 'maps/submaps/surface_submaps/mountains/vault2.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault2.dmm"
cost = 5
allow_duplicates = TRUE
template_group = "Buried Vaults"
@@ -307,67 +307,64 @@
/datum/map_template/surface/mountains/normal/vault3 //VOREStation Edit
name = "Mine Vault 3"
desc = "A small vault with potential loot. Also a horrible suprise."
mappath = 'maps/submaps/surface_submaps/mountains/vault3.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault3.dmm"
cost = 15
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/vault4 //VOREStation Edit
name = "Mine Vault 4"
desc = "A small xeno vault with potential loot. Also horrible suprises."
mappath = 'maps/submaps/surface_submaps/mountains/vault4.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault4.dmm"
cost = 20
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/vault5 //VOREStation Edit
name = "Mine Vault 5"
desc = "A small xeno vault with potential loot. Also major horrible suprises."
mappath = 'maps/submaps/surface_submaps/mountains/vault5.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault5.dmm"
cost = 25
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/vault6 //VOREStation Edit
name = "Mine Vault 6"
desc = "A small mercenary tower with potential loot."
mappath = 'maps/submaps/surface_submaps/mountains/vault6.dmm'
mappath = "maps/submaps/surface_submaps/mountains/vault6.dmm"
cost = 25
template_group = "Buried Vaults"
/datum/map_template/surface/mountains/normal/BlastMine1 //VOREStation Edit
name = "Blast Mine 1"
desc = "An abandoned blast mining site, seems that local wildlife has moved in."
mappath = 'maps/submaps/surface_submaps/mountains/BlastMine1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/BlastMine1.dmm"
cost = 20
/datum/map_template/surface/mountains/normal/lava_trench //VOREStation Edit
name = "lava trench"
desc = "A long stretch of lava underground, almost river-like, with a small crystal research outpost on the side."
mappath = 'maps/submaps/surface_submaps/mountains/lava_trench.dmm'
mappath = "maps/submaps/surface_submaps/mountains/lava_trench.dmm"
cost = 20
fixed_orientation = TRUE
/datum/map_template/surface/mountains/normal/crashedmedshuttle //VOREStation Edit
name = "Crashed Med Shuttle"
desc = "A medical response shuttle that went missing some time ago. So this is where they went."
mappath = 'maps/submaps/surface_submaps/mountains/CrashedMedShuttle1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/mountains/CrashedMedShuttle1_vr.dmm" //VOREStation Edit
cost = 20
fixed_orientation = TRUE
/datum/map_template/surface/mountains/normal/excavation1 //VOREStation Edit
name = "Excavation Site"
desc = "An abandoned mining site."
mappath = 'maps/submaps/surface_submaps/mountains/excavation1.dmm'
mappath = "maps/submaps/surface_submaps/mountains/excavation1.dmm"
cost = 20
/datum/map_template/surface/mountains/deep/spatial_anomaly
name = "spatial anomaly"
desc = "A strange section of the caves that seems twist and turn in ways that shouldn't be physically possible."
mappath = 'maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm'
mappath = "maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm"
cost = INFINITY /// Prevent spawning.
fixed_orientation = TRUE
/datum/map_template/surface/mountains/normal/Speakeasy //VOREStation add
name = "Speakeasy"
desc = "A hidden underground bar to serve drinks in secret and in style."
mappath = 'maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm'
mappath = "maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm"
cost = 10
allow_duplicates = FALSE
+47 -48
View File
@@ -61,289 +61,288 @@
/datum/map_template/surface/plains/farm1
name = "Farm 1"
desc = "A small farm tended by a farmbot."
mappath = 'maps/submaps/surface_submaps/plains/farm1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/farm1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/construction1
name = "Construction Site 1"
desc = "A structure being built. It seems laziness is not limited to engineers."
mappath = 'maps/submaps/surface_submaps/plains/construction1.dmm'
mappath = "maps/submaps/surface_submaps/plains/construction1.dmm"
cost = 10
/datum/map_template/surface/plains/camp1
name = "Camp Site 1"
desc = "A small campsite, complete with housing and bonfire."
mappath = 'maps/submaps/surface_submaps/plains/camp1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/camp1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/house1
name = "House 1"
desc = "A fair sized house out in the frontier, that belonged to a well-traveled explorer."
mappath = 'maps/submaps/surface_submaps/plains/house1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/house1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/beacons
name = "Collection of Marker Beacons"
desc = "A bunch of marker beacons, scattered in a strange pattern."
mappath = 'maps/submaps/surface_submaps/plains/beacons.dmm'
mappath = "maps/submaps/surface_submaps/plains/beacons.dmm"
cost = 5
fixed_orientation = TRUE
/datum/map_template/surface/plains/Epod
name = "Emergency Pod"
desc = "A vacant Emergency pod in the middle of nowhere."
mappath = 'maps/submaps/surface_submaps/plains/Epod.dmm'
mappath = "maps/submaps/surface_submaps/plains/Epod.dmm"
cost = 5
/datum/map_template/surface/plains/Epod2
name = "Emergency Pod 2"
desc = "A locked Emergency pod in the middle of nowhere."
mappath = 'maps/submaps/surface_submaps/plains/Epod2.dmm'
mappath = "maps/submaps/surface_submaps/plains/Epod2.dmm"
cost = 5
/datum/map_template/surface/plains/normal/Rocky2
name = "Rocky 2"
desc = "More rocks."
mappath = 'maps/submaps/surface_submaps/plains/Rocky2.dmm'
mappath = "maps/submaps/surface_submaps/plains/Rocky2.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/surface/plains/PascalB
name = "Irradiated Manhole Cover"
desc = "How did this old thing get all the way out here?"
mappath = 'maps/submaps/surface_submaps/plains/PascalB.dmm'
mappath = "maps/submaps/surface_submaps/plains/PascalB.dmm"
cost = 5
/datum/map_template/surface/plains/bonfire
name = "Abandoned Bonfire"
desc = "Someone seems to enjoy orange juice a bit too much."
mappath = 'maps/submaps/surface_submaps/plains/bonfire.dmm'
mappath = "maps/submaps/surface_submaps/plains/bonfire.dmm"
cost = 5
/datum/map_template/surface/plains/Rocky5
name = "Rocky 5"
desc = "More rocks, Less Stalone"
mappath = 'maps/submaps/surface_submaps/plains/Rocky5.dmm'
mappath = "maps/submaps/surface_submaps/plains/Rocky5.dmm"
cost = 5
/datum/map_template/surface/plains/Shakden
name = "Shantak Den"
desc = "Not to be confused with Shaq Den"
mappath = 'maps/submaps/surface_submaps/plains/Shakden_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Shakden_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/Field1
name = "Field 1"
desc = "A regular field with a tug on it"
mappath = 'maps/submaps/surface_submaps/plains/Field1.dmm'
mappath = "maps/submaps/surface_submaps/plains/Field1.dmm"
cost = 20
/datum/map_template/surface/plains/Thiefc
name = "Thieves Cave"
desc = "A thieves stash"
mappath = 'maps/submaps/surface_submaps/plains/Thiefc_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Thiefc_vr.dmm" //VOREStation Edit
cost = 20
/datum/map_template/surface/plains/smol2
name = "Small 2"
desc = "A small formation of mishaped surgery"
mappath = 'maps/submaps/surface_submaps/plains/smol2.dmm'
mappath = "maps/submaps/surface_submaps/plains/smol2.dmm"
cost = 10
/datum/map_template/surface/plains/Mechpt
name = "Mechpit"
desc = "A illmade Mech brawling ring"
mappath = 'maps/submaps/surface_submaps/plains/Mechpt.dmm'
mappath = "maps/submaps/surface_submaps/plains/Mechpt.dmm"
cost = 15
/datum/map_template/surface/plains/Boathouse
name = "Boathouse"
desc = "A fance house on a lake."
mappath = 'maps/submaps/surface_submaps/plains/Boathouse_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Boathouse_vr.dmm" //VOREStation Edit
cost = 30
/datum/map_template/surface/plains/PooledR
name = "Pooled Rocks"
desc = "An intresting rocky location"
mappath = 'maps/submaps/surface_submaps/plains/PooledR_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/PooledR_vr.dmm" //VOREStation Edit
cost = 15
/datum/map_template/surface/plains/Smol3
name = "Small 3"
desc = "A small stand"
mappath = 'maps/submaps/surface_submaps/plains/Smol3.dmm'
mappath = "maps/submaps/surface_submaps/plains/Smol3.dmm"
cost = 10
/datum/map_template/surface/plains/Diner
name = "Diner"
desc = "Old Timey Tasty"
mappath = 'maps/submaps/surface_submaps/plains/Diner_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Diner_vr.dmm" //VOREStation Edit
cost = 25
/datum/map_template/surface/plains/snow1
name = "Snow 1"
desc = "Snow"
mappath = 'maps/submaps/surface_submaps/plains/snow1.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow1.dmm"
cost = 5
/datum/map_template/surface/plains/snow2
name = "Snow 2"
desc = "More snow"
mappath = 'maps/submaps/surface_submaps/plains/snow2.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow2.dmm"
cost = 5
/datum/map_template/surface/plains/snow3
name = "Snow 3"
desc = "Snow Snow Snow"
mappath = 'maps/submaps/surface_submaps/plains/snow3.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow3.dmm"
cost = 5
/datum/map_template/surface/plains/snow4
name = "Snow 4"
desc = "Too much snow"
mappath = 'maps/submaps/surface_submaps/plains/snow4.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow4.dmm"
cost = 5
/datum/map_template/surface/plains/snow5
name = "Snow 5"
desc = "Please stop the snow"
mappath = 'maps/submaps/surface_submaps/plains/snow5.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow5.dmm"
cost = 5
/datum/map_template/surface/plains/RationCache
name = "Ration Cache"
desc = "A forgotten cache of emergency rations."
mappath = 'maps/submaps/surface_submaps/plains/RationCache_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/RationCache_vr.dmm" //VOREStation Edit
cost = 5
/datum/map_template/surface/plains/SupplyDrop2
name = "Old Supply Drop"
desc = "A drop pod that's clearly been here a while, most of the things inside are rusted and worthless."
mappath = 'maps/submaps/surface_submaps/plains/SupplyDrop2.dmm'
mappath = "maps/submaps/surface_submaps/plains/SupplyDrop2.dmm"
cost = 8
/datum/map_template/surface/plains/Oldhouse
name = "Old House"
desc = "Someones old library it seems.."
mappath = 'maps/submaps/surface_submaps/plains/Oldhouse_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Oldhouse_vr.dmm" //VOREStation Edit
cost = 15
/datum/map_template/surface/plains/ChemSpill1
name = "Ruptured Canister"
desc = "A dumped chemical canister. Looks dangerous."
mappath = 'maps/submaps/surface_submaps/plains/chemspill1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/chemspill1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/PlainsKururak
name = "Lone Kururak"
desc = "A lone Kururak's den."
mappath = 'maps/submaps/surface_submaps/plains/PlainsKururak.dmm'
mappath = "maps/submaps/surface_submaps/plains/PlainsKururak.dmm"
cost = 10
/datum/map_template/surface/plains/BuriedTreasure1
name = "Buried Treasure 1"
desc = "A hole in the ground, who knows what might be inside!"
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure.dmm'
mappath = "maps/submaps/surface_submaps/plains/BuriedTreasure.dmm"
cost = 10
template_group = "Shallow Grave"
/datum/map_template/surface/plains/BuriedTreasure2
name = "Buried Treasure 2"
desc = "A hole in the ground, who knows what might be inside!"
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm'
mappath = "maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm"
cost = 10
template_group = "Shallow Grave"
/datum/map_template/surface/plains/BuriedTreasure3
name = "Buried Treasure 3"
desc = "A hole in the ground, who knows what might be inside!"
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm'
mappath = "maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm"
cost = 10
template_group = "Shallow Grave"
/datum/map_template/surface/plains/oldhotel
name = "Old Hotel"
desc = "A abandoned hotel of sort, wonder why it was left behind."
mappath = 'maps/submaps/surface_submaps/plains/oldhotel.dmm'
mappath = "maps/submaps/surface_submaps/plains/oldhotel.dmm"
cost = 15
/datum/map_template/surface/plains/priderock
name = "Pride Rock"
desc = "A quite steep petruding rock from the earth, looks like a good hike."
mappath = 'maps/submaps/surface_submaps/plains/priderock.dmm'
mappath = "maps/submaps/surface_submaps/plains/priderock.dmm"
cost = 10
/datum/map_template/surface/plains/lonehome
name = "Lone Home"
desc = "A quite inoffensive looking home, damaged but still holding up."
mappath = 'maps/submaps/surface_submaps/plains/lonehome_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/lonehome_vr.dmm" //VOREStation Edit
cost = 15
/datum/map_template/surface/plains/hotspring
name = "Hot Spring"
desc = "Wait what, a hotspring in a frost planet?"
mappath = 'maps/submaps/surface_submaps/plains/hotspring.dmm'
mappath = "maps/submaps/surface_submaps/plains/hotspring.dmm"
cost = 5
/datum/map_template/surface/plains/methlab
name = "Meth Lab"
desc = "A broken down greenhouse lab?, this does not look safe."
mappath = 'maps/submaps/surface_submaps/plains/methlab.dmm'
mappath = "maps/submaps/surface_submaps/plains/methlab.dmm"
cost = 15
/datum/map_template/surface/plains/VRDen
name = "VR Den"
desc = "A temporarily abandoned VR den, still functional."
mappath = 'maps/submaps/surface_submaps/plains/VRDen.dmm'
mappath = "maps/submaps/surface_submaps/plains/VRDen.dmm"
cost = 10
/datum/map_template/surface/plains/leopardmanderden
name = "Leopardmander Den"
desc = "Den of a voracious but very rare beast."
mappath = 'maps/submaps/surface_submaps/plains/leopardmanderden.dmm'
mappath = "maps/submaps/surface_submaps/plains/leopardmanderden.dmm"
cost = 10
/datum/map_template/surface/plains/greatwolfden
name = "Great Wolf Den"
desc = "Den hosted by the biggest alpha wolf of the wilderness"
mappath = 'maps/submaps/surface_submaps/plains/greatwolfden.dmm'
mappath = "maps/submaps/surface_submaps/plains/greatwolfden.dmm"
cost = 15
/datum/map_template/surface/plains/dogbase
name = "Dog Base"
desc = "A highly secured base with hungry trained canines"
mappath = 'maps/submaps/surface_submaps/plains/dogbase.dmm'
mappath = "maps/submaps/surface_submaps/plains/dogbase.dmm"
cost = 20
allow_duplicates = FALSE
/datum/map_template/surface/wilderness/normal/emptycabin
name = "Empty Cabin"
desc = "An inconspicuous looking den hosted by a hungry otie"
mappath = 'maps/submaps/surface_submaps/plains/emptycabin.dmm'
mappath = "maps/submaps/surface_submaps/plains/emptycabin.dmm"
cost = 10
/datum/map_template/surface/plains/lonewolf
name = "Lone Wolf"
desc = "A large oppressing wolf, supervising from above its cliff"
mappath = 'maps/submaps/surface_submaps/plains/lonewolf.dmm'
mappath = "maps/submaps/surface_submaps/plains/lonewolf.dmm"
cost = 5
/datum/map_template/surface/plains/otieshelter
name = "Otie Shelter"
desc = "A experimental lab of various breeds of oties"
mappath = 'maps/submaps/surface_submaps/plains/otieshelter.dmm'
mappath = "maps/submaps/surface_submaps/plains/otieshelter.dmm"
cost = 15
/datum/map_template/surface/plains/syndisniper
name = "Syndi Sniper"
desc = "Syndicate watch tower, deadly but secluded"
mappath = 'maps/submaps/surface_submaps/plains/syndisniper.dmm'
mappath = "maps/submaps/surface_submaps/plains/syndisniper.dmm"
cost = 5
/datum/map_template/surface/plains/drgnplateu
name = "Dragon Plateu"
desc = "A dangerous plateu of cliffs home to a rampant gold hoarding dragon"
mappath = 'maps/submaps/surface_submaps/plains/drgnplateu.dmm'
mappath = "maps/submaps/surface_submaps/plains/drgnplateu.dmm"
cost = 15
allow_duplicates = FALSE
@@ -61,288 +61,287 @@
/datum/map_template/surface/plains/farm1
name = "Farm 1"
desc = "A small farm tended by a farmbot."
mappath = 'maps/submaps/surface_submaps/plains/farm1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/farm1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/construction1
name = "Construction Site 1"
desc = "A structure being built. It seems laziness is not limited to engineers."
mappath = 'maps/submaps/surface_submaps/plains/construction1.dmm'
mappath = "maps/submaps/surface_submaps/plains/construction1.dmm"
cost = 10
/datum/map_template/surface/plains/camp1
name = "Camp Site 1"
desc = "A small campsite, complete with housing and bonfire."
mappath = 'maps/submaps/surface_submaps/plains/camp1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/camp1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/house1
name = "House 1"
desc = "A fair sized house out in the frontier, that belonged to a well-traveled explorer."
mappath = 'maps/submaps/surface_submaps/plains/house1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/house1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/beacons
name = "Collection of Marker Beacons"
desc = "A bunch of marker beacons, scattered in a strange pattern."
mappath = 'maps/submaps/surface_submaps/plains/beacons.dmm'
mappath = "maps/submaps/surface_submaps/plains/beacons.dmm"
cost = 5
fixed_orientation = TRUE
/datum/map_template/surface/plains/Epod
name = "Emergency Pod"
desc = "A vacant Emergency pod in the middle of nowhere."
mappath = 'maps/submaps/surface_submaps/plains/Epod.dmm'
mappath = "maps/submaps/surface_submaps/plains/Epod.dmm"
cost = 5
/datum/map_template/surface/plains/Epod2
name = "Emergency Pod 2"
desc = "A locked Emergency pod in the middle of nowhere."
mappath = 'maps/submaps/surface_submaps/plains/Epod2.dmm'
mappath = "maps/submaps/surface_submaps/plains/Epod2.dmm"
cost = 5
/datum/map_template/surface/plains/normal/Rocky2
name = "Rocky 2"
desc = "More rocks."
mappath = 'maps/submaps/surface_submaps/plains/Rocky2.dmm'
mappath = "maps/submaps/surface_submaps/plains/Rocky2.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/surface/plains/PascalB
name = "Irradiated Manhole Cover"
desc = "How did this old thing get all the way out here?"
mappath = 'maps/submaps/surface_submaps/plains/PascalB.dmm'
mappath = "maps/submaps/surface_submaps/plains/PascalB.dmm"
cost = 5
/datum/map_template/surface/plains/bonfire
name = "Abandoned Bonfire"
desc = "Someone seems to enjoy orange juice a bit too much."
mappath = 'maps/submaps/surface_submaps/plains/bonfire.dmm'
mappath = "maps/submaps/surface_submaps/plains/bonfire.dmm"
cost = 5
/datum/map_template/surface/plains/Rocky5
name = "Rocky 5"
desc = "More rocks, Less Stalone"
mappath = 'maps/submaps/surface_submaps/plains/Rocky5.dmm'
mappath = "maps/submaps/surface_submaps/plains/Rocky5.dmm"
cost = 5
/datum/map_template/surface/plains/Shakden
name = "Shantak Den"
desc = "Not to be confused with Shaq Den"
mappath = 'maps/submaps/surface_submaps/plains/Shakden_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Shakden_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/Field1
name = "Field 1"
desc = "A regular field with a tug on it"
mappath = 'maps/submaps/surface_submaps/plains/Field1.dmm'
mappath = "maps/submaps/surface_submaps/plains/Field1.dmm"
cost = 20
/datum/map_template/surface/plains/Thiefc
name = "Thieves Cave"
desc = "A thieves stash"
mappath = 'maps/submaps/surface_submaps/plains/Thiefc_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Thiefc_vr.dmm" //VOREStation Edit
cost = 20
/datum/map_template/surface/plains/smol2
name = "Small 2"
desc = "A small formation of mishaped surgery"
mappath = 'maps/submaps/surface_submaps/plains/smol2.dmm'
mappath = "maps/submaps/surface_submaps/plains/smol2.dmm"
cost = 10
/datum/map_template/surface/plains/Mechpt
name = "Mechpit"
desc = "A illmade Mech brawling ring"
mappath = 'maps/submaps/surface_submaps/plains/Mechpt.dmm'
mappath = "maps/submaps/surface_submaps/plains/Mechpt.dmm"
cost = 15
/datum/map_template/surface/plains/Boathouse
name = "Boathouse"
desc = "A fance house on a lake."
mappath = 'maps/submaps/surface_submaps/plains/Boathouse_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Boathouse_vr.dmm" //VOREStation Edit
cost = 30
/datum/map_template/surface/plains/PooledR
name = "Pooled Rocks"
desc = "An intresting rocky location"
mappath = 'maps/submaps/surface_submaps/plains/PooledR_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/PooledR_vr.dmm" //VOREStation Edit
cost = 15
/datum/map_template/surface/plains/Smol3
name = "Small 3"
desc = "A small stand"
mappath = 'maps/submaps/surface_submaps/plains/Smol3.dmm'
mappath = "maps/submaps/surface_submaps/plains/Smol3.dmm"
cost = 10
/datum/map_template/surface/plains/Diner
name = "Diner"
desc = "Old Timey Tasty"
mappath = 'maps/submaps/surface_submaps/plains/Diner_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Diner_vr.dmm" //VOREStation Edit
cost = 25
/datum/map_template/surface/plains/snow1
name = "Snow 1"
desc = "Snow"
mappath = 'maps/submaps/surface_submaps/plains/snow1.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow1.dmm"
cost = 5
/datum/map_template/surface/plains/snow2
name = "Snow 2"
desc = "More snow"
mappath = 'maps/submaps/surface_submaps/plains/snow2.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow2.dmm"
cost = 5
/datum/map_template/surface/plains/snow3
name = "Snow 3"
desc = "Snow Snow Snow"
mappath = 'maps/submaps/surface_submaps/plains/snow3.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow3.dmm"
cost = 5
/datum/map_template/surface/plains/snow4
name = "Snow 4"
desc = "Too much snow"
mappath = 'maps/submaps/surface_submaps/plains/snow4.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow4.dmm"
cost = 5
/datum/map_template/surface/plains/snow5
name = "Snow 5"
desc = "Please stop the snow"
mappath = 'maps/submaps/surface_submaps/plains/snow5.dmm'
mappath = "maps/submaps/surface_submaps/plains/snow5.dmm"
cost = 5
/datum/map_template/surface/plains/RationCache
name = "Ration Cache"
desc = "A forgotten cache of emergency rations."
mappath = 'maps/submaps/surface_submaps/plains/RationCache_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/RationCache_vr.dmm" //VOREStation Edit
cost = 5
/datum/map_template/surface/plains/SupplyDrop2
name = "Old Supply Drop"
desc = "A drop pod that's clearly been here a while, most of the things inside are rusted and worthless."
mappath = 'maps/submaps/surface_submaps/plains/SupplyDrop2.dmm'
mappath = "maps/submaps/surface_submaps/plains/SupplyDrop2.dmm"
cost = 8
/datum/map_template/surface/plains/Oldhouse
name = "Old House"
desc = "Someones old library it seems.."
mappath = 'maps/submaps/surface_submaps/plains/Oldhouse_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/Oldhouse_vr.dmm" //VOREStation Edit
cost = 15
/datum/map_template/surface/plains/ChemSpill1
name = "Ruptured Canister"
desc = "A dumped chemical canister. Looks dangerous."
mappath = 'maps/submaps/surface_submaps/plains/chemspill1_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/chemspill1_vr.dmm" //VOREStation Edit
cost = 10
/datum/map_template/surface/plains/PlainsKururak
name = "Lone Kururak"
desc = "A lone Kururak's den."
mappath = 'maps/submaps/surface_submaps/plains/PlainsKururak.dmm'
mappath = "maps/submaps/surface_submaps/plains/PlainsKururak.dmm"
cost = 10
/datum/map_template/surface/plains/BuriedTreasure1
name = "Buried Treasure 1"
desc = "A hole in the ground, who knows what might be inside!"
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure.dmm'
mappath = "maps/submaps/surface_submaps/plains/BuriedTreasure.dmm"
cost = 10
template_group = "Shallow Grave"
/datum/map_template/surface/plains/BuriedTreasure2
name = "Buried Treasure 2"
desc = "A hole in the ground, who knows what might be inside!"
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm'
mappath = "maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm"
cost = 10
template_group = "Shallow Grave"
/datum/map_template/surface/plains/BuriedTreasure3
name = "Buried Treasure 3"
desc = "A hole in the ground, who knows what might be inside!"
mappath = 'maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm'
mappath = "maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm"
cost = 10
template_group = "Shallow Grave"
/datum/map_template/surface/plains/oldhotel
name = "Old Hotel"
desc = "A abandoned hotel of sort, wonder why it was left behind."
mappath = 'maps/submaps/surface_submaps/plains/oldhotel.dmm'
mappath = "maps/submaps/surface_submaps/plains/oldhotel.dmm"
cost = 15
/datum/map_template/surface/plains/priderock
name = "Pride Rock"
desc = "A quite steep petruding rock from the earth, looks like a good hike."
mappath = 'maps/submaps/surface_submaps/plains/priderock.dmm'
mappath = "maps/submaps/surface_submaps/plains/priderock.dmm"
cost = 10
/datum/map_template/surface/plains/lonehome
name = "Lone Home"
desc = "A quite inoffensive looking home, damaged but still holding up."
mappath = 'maps/submaps/surface_submaps/plains/lonehome_vr.dmm' //VOREStation Edit
mappath = "maps/submaps/surface_submaps/plains/lonehome_vr.dmm" //VOREStation Edit
cost = 15
/datum/map_template/surface/plains/hotspring
name = "Hot Spring"
desc = "Wait what, a hotspring in a frost planet?"
mappath = 'maps/submaps/surface_submaps/plains/hotspring.dmm'
mappath = "maps/submaps/surface_submaps/plains/hotspring.dmm"
cost = 5
/datum/map_template/surface/plains/methlab
name = "Meth Lab"
desc = "A broken down greenhouse lab?, this does not look safe."
mappath = 'maps/submaps/surface_submaps/plains/methlab.dmm'
mappath = "maps/submaps/surface_submaps/plains/methlab.dmm"
cost = 15
/datum/map_template/surface/plains/VRDen
name = "VR Den"
desc = "A temporarily abandoned VR den, still functional."
mappath = 'maps/submaps/surface_submaps/plains/VRDen.dmm'
mappath = "maps/submaps/surface_submaps/plains/VRDen.dmm"
cost = 10
/datum/map_template/surface/plains/leopardmanderden
name = "Leopardmander Den"
desc = "Den of a voracious but very rare beast."
mappath = 'maps/submaps/surface_submaps/plains/leopardmanderden.dmm'
mappath = "maps/submaps/surface_submaps/plains/leopardmanderden.dmm"
cost = 10
/datum/map_template/surface/plains/greatwolfden
name = "Great Wolf Den"
desc = "Den hosted by the biggest alpha wolf of the wilderness"
mappath = 'maps/submaps/surface_submaps/plains/greatwolfden.dmm'
mappath = "maps/submaps/surface_submaps/plains/greatwolfden.dmm"
cost = 15
/*
/datum/map_template/surface/plains/dogbase
name = "Dog Base"
desc = "A highly secured base with hungry trained canines"
mappath = 'maps/submaps/surface_submaps/plains/dogbase.dmm'
mappath = "maps/submaps/surface_submaps/plains/dogbase.dmm"
cost = 20
allow_duplicates = FALSE
*/
/datum/map_template/surface/plains/emptycabin
name = "Empty Cabin"
desc = "An inconspicuous looking den hosted by a hungry otie"
mappath = 'maps/submaps/surface_submaps/plains/emptycabin.dmm'
mappath = "maps/submaps/surface_submaps/plains/emptycabin.dmm"
cost = 10
/datum/map_template/surface/plains/lonewolf
name = "Lone Wolf"
desc = "A large oppressing wolf, supervising from above its cliff"
mappath = 'maps/submaps/surface_submaps/plains/lonewolf.dmm'
mappath = "maps/submaps/surface_submaps/plains/lonewolf.dmm"
cost = 5
/*
/datum/map_template/surface/plains/otieshelter
name = "Otie Shelter"
desc = "A experimental lab of various breeds of oties"
mappath = 'maps/submaps/surface_submaps/plains/otieshelter.dmm'
mappath = "maps/submaps/surface_submaps/plains/otieshelter.dmm"
cost = 15
/datum/map_template/surface/plains/syndisniper
name = "Syndi Sniper"
desc = "Syndicate watch tower, deadly but secluded"
mappath = 'maps/submaps/surface_submaps/plains/syndisniper.dmm'
mappath = "maps/submaps/surface_submaps/plains/syndisniper.dmm"
cost = 5
*/
/datum/map_template/surface/plains/drgnplateu
name = "Dragon Plateu"
desc = "A dangerous plateu of cliffs home to a rampant gold hoarding dragon"
mappath = 'maps/submaps/surface_submaps/plains/drgnplateu.dmm'
mappath = "maps/submaps/surface_submaps/plains/drgnplateu.dmm"
cost = 15
allow_duplicates = FALSE
@@ -31,7 +31,7 @@
#include "Manor1.dmm"
#include "Epod3.dmm"
#include "Epod4.dmm"
#include "ButcherShack.dmm"
#include "butchershack.dmm"
#include "Chapel.dmm"
#include "Shelter.dmm"
#include "derelictengine.dmm"
@@ -72,328 +72,328 @@
/datum/map_template/surface/wilderness/normal/spider1
name = "Spider Nest 1"
desc = "A small spider nest, in the forest."
mappath = 'maps/submaps/surface_submaps/wilderness/spider1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/spider1.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/surface/wilderness/normal/Flake
name = "Forest Lake"
desc = "A serene lake sitting amidst the surface."
mappath = 'maps/submaps/surface_submaps/wilderness/Flake.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Flake.dmm"
cost = 10
/datum/map_template/surface/wilderness/normal/Mcamp1
name = "Military Camp 1"
desc = "A derelict military camp host to some unsavory dangers"
mappath = 'maps/submaps/surface_submaps/wilderness/MCamp1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/MCamp1.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Mudpit
name = "Mudpit"
desc = "What happens when someone is a bit too careless with gas.."
mappath = 'maps/submaps/surface_submaps/wilderness/Mudpit.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Mudpit.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Rocky1
name = "Rocky 1"
desc = "DununanununanununuNAnana"
mappath = 'maps/submaps/surface_submaps/wilderness/Rocky1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Rocky1.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/surface/wilderness/normal/Rocky2
name = "Rocky 2"
desc = "More rocks."
mappath = 'maps/submaps/surface_submaps/wilderness/Rocky2.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Rocky2.dmm"
allow_duplicates = TRUE
cost = 5
/datum/map_template/surface/wilderness/normal/Rocky3
name = "Rocky 3"
desc = "More and more and more rocks."
mappath = 'maps/submaps/surface_submaps/wilderness/Rocky3.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Rocky3.dmm"
desc = "DununanununanununuNAnana"
cost = 5
/datum/map_template/surface/wilderness/normal/Shack1
name = "Shack 1"
desc = "A small shack in the middle of nowhere, Your halloween murder happens here"
mappath = 'maps/submaps/surface_submaps/wilderness/Shack1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Shack1.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Smol1
name = "Smol 1"
desc = "A tiny grove of trees, The Nemesis of thicc"
mappath = 'maps/submaps/surface_submaps/wilderness/Smol1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Smol1.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Snowrock1
name = "Snowrock 1"
desc = "A rocky snow covered area"
mappath = 'maps/submaps/surface_submaps/wilderness/Snowrock1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Snowrock1.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Cragzone1
name = "Cragzone 1"
desc = "Rocks and more rocks."
mappath = 'maps/submaps/surface_submaps/wilderness/Cragzone1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Cragzone1.dmm"
cost = 5
allow_duplicates = TRUE
/datum/map_template/surface/wilderness/normal/Lab1
name = "Lab 1"
desc = "An isolated small robotics lab."
mappath = 'maps/submaps/surface_submaps/wilderness/Lab1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Lab1.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Rocky4
name = "Rocky 4"
desc = "An interesting geographic formation."
mappath = 'maps/submaps/surface_submaps/wilderness/Rocky4.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Rocky4.dmm"
cost = 5
/datum/map_template/surface/wilderness/deep/DJOutpost1
name = "DJOutpost 1"
desc = "Home of Sif Free Radio, the best - and only - radio station for miles around."
mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm"
template_group = "Sif Free Radio"
cost = 5
/datum/map_template/surface/wilderness/deep/DJOutpost2
name = "DJOutpost 2"
desc = "The cratered remains of Sif Free Radio, the best - and only - radio station for miles around."
mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm"
template_group = "Sif Free Radio"
cost = 5
/datum/map_template/surface/wilderness/deep/DJOutpost3
name = "DJOutpost 3"
desc = "The surprisingly high-tech home of Sif Free Radio, the best - and only - radio station for miles around."
mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost3.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/DJOutpost3.dmm"
template_group = "Sif Free Radio"
cost = 10
/datum/map_template/surface/wilderness/deep/DJOutpost4
name = "DJOutpost 4"
desc = "The surprisingly high-tech home of Sif Free Radio, the only radio station run by mindless clones."
mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost4.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/DJOutpost4.dmm"
template_group = "Sif Free Radio"
cost = INFINITY /// Prevent spawning.
/datum/map_template/surface/wilderness/deep/Boombase
name = "Boombase"
desc = "What happens when you don't follow SOP."
mappath = 'maps/submaps/surface_submaps/wilderness/Boombase.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Boombase.dmm"
cost = 5
/datum/map_template/surface/wilderness/deep/BSD
name = "Black Shuttle Down"
desc = "You REALLY shouldn't be near this."
mappath = 'maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm"
cost = 30
template_group = "Shuttle Down"
/datum/map_template/surface/wilderness/deep/BluSD
name = "Blue Shuttle Down"
desc = "You REALLY shouldn't be near this. Mostly because they're Police."
mappath = 'maps/submaps/surface_submaps/wilderness/Blueshuttledown.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Blueshuttledown.dmm"
cost = INFINITY /// Prevent spawning.
template_group = "Shuttle Down"
/datum/map_template/surface/wilderness/deep/Rockybase
name = "Rocky Base"
desc = "A guide to upsetting Icarus and the EIO"
mappath = 'maps/submaps/surface_submaps/wilderness/Rockybase.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Rockybase.dmm"
cost = 35
/datum/map_template/surface/wilderness/deep/MHR
name = "Manhack Rock"
desc = "A rock filled with nasty Synthetics."
mappath = 'maps/submaps/surface_submaps/wilderness/MHR.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/MHR.dmm"
cost = 15
/datum/map_template/surface/wilderness/normal/GovPatrol
name = "Government Patrol"
desc = "A long lost SifGuard ground survey patrol. Now they have you guys!"
mappath = 'maps/submaps/surface_submaps/wilderness/GovPatrol.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/GovPatrol.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/KururakDen
name = "Kururak Den"
desc = "The den of a Kururak pack. May contain hibernating members."
mappath = 'maps/submaps/surface_submaps/wilderness/kururakden.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/kururakden.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/DecoupledEngine
name = "Decoupled Engine"
desc = "A damaged fission engine jettisoned from a starship long ago."
mappath = 'maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm"
cost = 15
/datum/map_template/surface/wilderness/deep/DoomP
name = "DoomP"
desc = "Witty description here."
mappath = 'maps/submaps/surface_submaps/wilderness/DoomP.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/DoomP.dmm"
cost = 30
/datum/map_template/surface/wilderness/deep/Cave
name = "CaveS"
desc = "Chitter chitter!"
mappath = 'maps/submaps/surface_submaps/wilderness/CaveS.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/CaveS.dmm"
cost = 20
/datum/map_template/surface/wilderness/normal/Drugden
name = "Drug Den"
desc = "The remains of ill thought out whims."
mappath = 'maps/submaps/surface_submaps/wilderness/Drugden.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Drugden.dmm"
cost = 20
/datum/map_template/surface/wilderness/normal/Musk
name = "Musk"
desc = "0 to 60 in 1.9 seconds."
mappath = 'maps/submaps/surface_submaps/wilderness/Musk.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Musk.dmm"
cost = 10
/datum/map_template/surface/wilderness/deep/Manor1
name = "Manor 1"
desc = "Whodunit"
mappath = 'maps/submaps/surface_submaps/wilderness/Manor1.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Manor1.dmm"
cost = 20
/datum/map_template/surface/wilderness/deep/Epod3
name = "Emergency Pod 3"
desc = "A webbed Emergency pod in the middle of nowhere."
mappath = 'maps/submaps/surface_submaps/wilderness/Epod3.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Epod3.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/Epod4
name = "Emergency Pod 4"
desc = "A flooded Emergency pod in the middle of nowhere."
mappath = 'maps/submaps/surface_submaps/wilderness/Epod4.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Epod4.dmm"
cost = 5
/datum/map_template/surface/wilderness/normal/ButcherShack
name = "Butcher Shack"
desc = "An old, bloody butcher's shack. Get your meat here!"
mappath = 'maps/submaps/surface_submaps/wilderness/ButcherShack.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/butchershack.dmm"
cost = 5
/datum/map_template/surface/wilderness/deep/Chapel1
name = "Chapel 1"
desc = "The chapel of lights and a robot."
mappath = 'maps/submaps/surface_submaps/wilderness/Chapel.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Chapel.dmm"
cost = 20
/datum/map_template/surface/wilderness/normal/Shelter1
name = "Shelter 1"
desc = "The remains of a resourceful, but prideful explorer."
mappath = 'maps/submaps/surface_submaps/wilderness/Shelter.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/Shelter.dmm"
cost = 10
/datum/map_template/surface/wilderness/normal/ChemSpill2
name = "Acrid Lake"
desc = "A pool of water contaminated with highly dangerous chemicals."
mappath = 'maps/submaps/surface_submaps/wilderness/chemspill2.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/chemspill2.dmm"
cost = 10
/datum/map_template/surface/wilderness/normal/FrostflyNest
name = "Frostfly Nest"
desc = "The nest of a Frostfly, or more."
mappath = 'maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm"
cost = 20
/datum/map_template/surface/wilderness/deep/DerelictEngine
name = "Derelict Engine"
desc = "An crashed alien ship, something went wrong inside."
mappath = 'maps/submaps/surface_submaps/wilderness/derelictengine.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/derelictengine.dmm"
cost = 45
/datum/map_template/surface/wilderness/normal/WolfDen
name = "Wolf Den"
desc = "Small wolf den and their hunt spoils."
mappath = 'maps/submaps/surface_submaps/wilderness/wolfden.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/wolfden.dmm"
cost = 10
/datum/map_template/surface/wilderness/normal/DemonPool
name = "Demon Pool"
desc = "A cult ritual gone horribly wrong."
mappath = 'maps/submaps/surface_submaps/wilderness/demonpool.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/demonpool.dmm"
cost = 15
/datum/map_template/surface/wilderness/normal/FrostOasis
name = "Frost Oasis"
desc = "A strange oasis with a gathering of wild animals."
mappath = 'maps/submaps/surface_submaps/wilderness/frostoasis.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/frostoasis.dmm"
cost = 15
/datum/map_template/surface/wilderness/deep/XenoHive
name = "Xeno Hive"
desc = "A containment experiment gone wrong."
mappath = 'maps/submaps/surface_submaps/wilderness/xenohive.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/xenohive.dmm"
cost = 25
/datum/map_template/surface/wilderness/deep/BorgLab
name = "Borg Lab"
desc = "Production of experimental combat robots gone rogue."
mappath = 'maps/submaps/surface_submaps/wilderness/borglab.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/borglab.dmm"
cost = 30
/datum/map_template/surface/wilderness/normal/Chasm
name = "Chasm"
desc = "An inconspicuous looking cave, watch your step."
mappath = 'maps/submaps/surface_submaps/wilderness/chasm.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/chasm.dmm"
cost = 20
/datum/map_template/surface/wilderness/deep/DeathDen
name = "Death Den"
desc = "Gathering of acolytes gone wrong."
mappath = 'maps/submaps/surface_submaps/wilderness/deathden.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/deathden.dmm"
cost = 15
/datum/map_template/surface/wilderness/deep/leopardmanderden
name = "Leopardmander Den"
desc = "Den of a voracious but very rare beast."
mappath = 'maps/submaps/surface_submaps/wilderness/leopardmanderden.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/leopardmanderden.dmm"
cost = 10
/datum/map_template/surface/wilderness/deep/greatwolfden
name = "Great Wolf Den"
desc = "Den hosted by the biggest alpha wolf of the wilderness"
mappath = 'maps/submaps/surface_submaps/wilderness/greatwolfden.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/greatwolfden.dmm"
cost = 15
/datum/map_template/surface/wilderness/deep/dogbase
name = "Dog Base"
desc = "A highly secured base with hungry trained canines"
mappath = 'maps/submaps/surface_submaps/wilderness/dogbase.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/dogbase.dmm"
cost = 20
/datum/map_template/surface/wilderness/normal/emptycabin
name = "Empty Cabin"
desc = "An inconspicuous looking den hosted by a hungry otie"
mappath = 'maps/submaps/surface_submaps/wilderness/emptycabin.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/emptycabin.dmm"
cost = 10
/datum/map_template/surface/wilderness/deep/lonewolf
name = "Lone Wolf"
desc = "A large oppressing wolf, supervising from above its cliff"
mappath = 'maps/submaps/surface_submaps/wilderness/lonewolf.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/lonewolf.dmm"
cost = 5
/datum/map_template/surface/wilderness/deep/otieshelter
name = "Otie Shelter"
desc = "A experimental lab of various breeds of oties"
mappath = 'maps/submaps/surface_submaps/wilderness/otieshelter.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/otieshelter.dmm"
cost = 15
/datum/map_template/surface/wilderness/deep/syndisniper
name = "Syndi Sniper"
desc = "Syndicate watch tower, deadly but secluded"
mappath = 'maps/submaps/surface_submaps/wilderness/syndisniper.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/syndisniper.dmm"
cost = 5
/datum/map_template/surface/wilderness/deep/drgnplateu
name = "Dragon Plateu"
desc = "A dangerous plateu of cliffs home to a rampant gold hoarding dragon"
mappath = 'maps/submaps/surface_submaps/wilderness/drgnplateu.dmm'
mappath = "maps/submaps/surface_submaps/wilderness/drgnplateu.dmm"
cost = 15
+16 -16
View File
@@ -7,7 +7,7 @@
/datum/map_template/tether_lateload/tether_centcom
name = "Tether - Centcom"
desc = "Central Command lives here!"
mappath = 'tether_centcom.dmm'
mappath = "maps/tether/submaps/tether_centcom.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/centcom
@@ -20,7 +20,7 @@
/datum/map_template/tether_lateload/tether_misc
name = "Tether - Misc"
desc = "Misc areas, like some transit areas, holodecks, merc area."
mappath = 'tether_misc.dmm'
mappath = "maps/tether/submaps/tether_misc.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/misc
@@ -34,7 +34,7 @@
/datum/map_template/tether_lateload/tether_underdark
name = "Tether - Underdark"
desc = "Mining, but harder."
mappath = 'tether_underdark.dmm'
mappath = "maps/tether/submaps/tether_underdark.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/underdark
@@ -56,7 +56,7 @@
/datum/map_template/tether_lateload/tether_plains
name = "Tether - Plains"
desc = "The Virgo 3B away mission."
mappath = 'tether_plains.dmm'
mappath = "maps/tether/submaps/tether_plains.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/tether_plains
/datum/map_z_level/tether_lateload/tether_plains
@@ -79,42 +79,42 @@
/datum/map_template/admin_use/ert
name = "Special Area - ERT"
desc = "It's the ERT ship! Lorge."
mappath = 'maps/submaps/admin_use_vr/ert.dmm'
mappath = "maps/submaps/admin_use_vr/ert.dmm"
/datum/map_template/admin_use/trader
name = "Special Area - Trader"
desc = "Big trader ship."
mappath = 'maps/submaps/admin_use_vr/tradeship.dmm'
mappath = "maps/submaps/admin_use_vr/tradeship.dmm"
/datum/map_template/admin_use/salamander_trader
name = "Special Area - Salamander Trader"
desc = "Modest trader ship."
mappath = 'maps/submaps/admin_use_vr/salamander_trader.dmm'
mappath = "maps/submaps/admin_use_vr/salamander_trader.dmm"
/datum/map_template/admin_use/mercenary
name = "Special Area - Merc Ship"
desc = "Prepare tae be boarded, arr!"
mappath = 'maps/submaps/admin_use_vr/kk_mercship.dmm'
mappath = "maps/submaps/admin_use_vr/kk_mercship.dmm"
/datum/map_template/admin_use/skipjack
name = "Special Area - Skipjack Base"
desc = "Stinky!"
mappath = 'maps/submaps/admin_use_vr/skipjack.dmm'
mappath = "maps/submaps/admin_use_vr/skipjack.dmm"
/datum/map_template/admin_use/thunderdome
name = "Special Area - Thunderdome"
desc = "Thunderrrrdomeee"
mappath = 'maps/submaps/admin_use_vr/thunderdome.dmm'
mappath = "maps/submaps/admin_use_vr/thunderdome.dmm"
/datum/map_template/admin_use/wizardbase
name = "Special Area - Wizard Base"
desc = "Wingardium Levosia"
mappath = 'maps/submaps/admin_use_vr/wizard.dmm'
mappath = "maps/submaps/admin_use_vr/wizard.dmm"
/datum/map_template/admin_use/dojo
name = "Special Area - Ninja Dojo"
desc = "Sneaky"
mappath = 'maps/submaps/admin_use_vr/dojo.dmm'
mappath = "maps/submaps/admin_use_vr/dojo.dmm"
//////////////////////////////////////////////////////////////////////////////
//Rogue Mines Stuff
@@ -122,7 +122,7 @@
/datum/map_template/tether_lateload/tether_roguemines1
name = "Asteroid Belt 1"
desc = "Mining, but rogue. Zone 1"
mappath = 'maps/submaps/rogue_mines_vr/rogue_mine1.dmm'
mappath = "maps/submaps/rogue_mines_vr/rogue_mine1.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/roguemines1
@@ -134,7 +134,7 @@
/datum/map_template/tether_lateload/tether_roguemines2
name = "Asteroid Belt 2"
desc = "Mining, but rogue. Zone 2"
mappath = 'maps/submaps/rogue_mines_vr/rogue_mine2.dmm'
mappath = "maps/submaps/rogue_mines_vr/rogue_mine2.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/roguemines2
@@ -206,7 +206,7 @@
/datum/map_template/tether_lateload/away_aerostat
name = "Remmi Aerostat - Z1 Aerostat"
desc = "The Virgo 2 Aerostat away mission."
mappath = 'maps/expedition_vr/aerostat/aerostat.dmm'
mappath = "maps/expedition_vr/aerostat/aerostat.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/away_aerostat
/datum/map_z_level/tether_lateload/away_aerostat
@@ -217,7 +217,7 @@
/datum/map_template/tether_lateload/away_aerostat_surface
name = "Remmi Aerostat - Z2 Surface"
desc = "The surface from the Virgo 2 Aerostat."
mappath = 'maps/expedition_vr/aerostat/surface.dmm'
mappath = "maps/expedition_vr/aerostat/surface.dmm"
associated_map_datum = /datum/map_z_level/tether_lateload/away_aerostat_surface
/datum/map_template/tether_lateload/away_aerostat_surface/on_map_loaded(z)
@@ -5,171 +5,171 @@
/datum/map_template/underdark/normal_mob
name = "Underdark Normal Mob Spawn"
mappath = 'normal_mob.dmm'
mappath = "maps/tether/submaps/underdark_pois/normal_mob.dmm"
cost = 5
/datum/map_template/underdark/hard_mob
name = "Underdark Hard Mob Spawn"
mappath = 'hard_mob.dmm'
mappath = "maps/tether/submaps/underdark_pois/hard_mob.dmm"
cost = 15
/datum/map_template/underdark/vault1
name = "Underdark Vault 1"
mappath = 'vault1.dmm'
mappath = "maps/tether/submaps/underdark_pois/vault1.dmm"
cost = 10
/datum/map_template/underdark/vault2
name = "Underdark Vault 2"
mappath = 'vault2.dmm'
mappath = "maps/tether/submaps/underdark_pois/vault2.dmm"
cost = 15
/datum/map_template/underdark/vault3
name = "Underdark Vault 3"
mappath = 'vault3.dmm'
mappath = "maps/tether/submaps/underdark_pois/vault3.dmm"
cost = 10
/datum/map_template/underdark/guardedloot_normal
name = "Underdark Guarded Loot Normal"
mappath = 'guardedloot_normal.dmm'
mappath = "maps/tether/submaps/underdark_pois/guardedloot_normal.dmm"
cost = 10
/datum/map_template/underdark/guardedloot_hard
name = "Underdark Guarded Loot Hard"
mappath = 'guardedloot_hard.dmm'
mappath = "maps/tether/submaps/underdark_pois/guardedloot_hard.dmm"
cost = 15
/datum/map_template/underdark/guardedsample_normal
name = "Underdark Guarded Sample Normal" //2x common-or-uncommon
mappath = 'guardedsample_normal.dmm'
mappath = "maps/tether/submaps/underdark_pois/guardedsample_normal.dmm"
cost = 10
/datum/map_template/underdark/guardedsample_hard
name = "Underdark Guarded Sample Hard" //uncommon-or-rare
mappath = 'guardedsample_hard.dmm'
mappath = "maps/tether/submaps/underdark_pois/guardedsample_hard.dmm"
cost = 15
/datum/map_template/underdark/blaster
name = "Underdark Blaster"
mappath = 'blaster.dmm'
mappath = "maps/tether/submaps/underdark_pois/blaster.dmm"
cost = 10
/datum/map_template/underdark/mechwreck
name = "Underdark Mech Wreck"
mappath = 'mechwreck.dmm'
mappath = "maps/tether/submaps/underdark_pois/mechwreck.dmm"
cost = 15
allow_duplicates = FALSE
/datum/map_template/underdark/abandonedshelter
name = "Underdark Abandoned Shelter"
mappath = 'abandonedshelter.dmm'
mappath = "maps/tether/submaps/underdark_pois/abandonedshelter.dmm"
cost = 15
allow_duplicates = FALSE
/datum/map_template/underdark/deadminer
name = "Underdark Dead Miner"
mappath = 'deadminer.dmm'
mappath = "maps/tether/submaps/underdark_pois/deadminer.dmm"
cost = 15
allow_duplicates = FALSE
/datum/map_template/underdark/underhall
name = "Underdark Golden Hall"
mappath = 'goldhall.dmm'
mappath = "maps/tether/submaps/underdark_pois/goldhall.dmm"
cost = 20
allow_duplicates = FALSE
/datum/map_template/underdark/mechbay
name = "Underdark Mech Bay"
mappath = 'mechbay.dmm'
mappath = "maps/tether/submaps/underdark_pois/mechbay.dmm"
cost = 25
allow_duplicates = FALSE
/datum/map_template/underdark/testsite
name = "Underdark Test Site"
mappath = 'testsite.dmm'
mappath = "maps/tether/submaps/underdark_pois/testsite.dmm"
cost = 20
allow_duplicates = FALSE
/datum/map_template/underdark/corridor // Bob was a derp
name = "Underdark Corridor"
mappath = 'Corridor.dmm'
mappath = "maps/tether/submaps/underdark_pois/Corridor.dmm"
cost = 5
allow_duplicates = FALSE
/datum/map_template/underdark/old_drone_hive
name = "Underdark Old Drone Hive"
mappath = 'old_drone_hive.dmm'
mappath = "maps/tether/submaps/underdark_pois/old_drone_hive.dmm"
cost = 15
/datum/map_template/underdark/phoron_rat_den
name = "Underdark Phoron Rat Den"
mappath = 'phoron_rat_den.dmm'
mappath = "maps/tether/submaps/underdark_pois/phoron_rat_den.dmm"
cost = 25
allow_duplicates = FALSE
/datum/map_template/underdark/subterranean_lake
name = "Underdark Underground Lake"
mappath = 'subterranean_lake.dmm'
mappath = "maps/tether/submaps/underdark_pois/subterranean_lake.dmm"
cost = 5
/datum/map_template/underdark/spider_nest
name = "Underdark Spider Nest"
mappath = 'spider_nest.dmm'
mappath = "maps/tether/submaps/underdark_pois/spider_nest.dmm"
cost = 15
/datum/map_template/underdark/rykka_easter_egg // bark bark Rykka was here. <3
name = "Underdark GSD"
mappath = 'rykka_easter_egg.dmm'
mappath = "maps/tether/submaps/underdark_pois/rykka_easter_egg.dmm"
cost = 5
allow_duplicates = FALSE
/datum/map_template/underdark/tree_shrine
name = "Underdark Tree"
mappath = 'tree_shrine.dmm'
mappath = "maps/tether/submaps/underdark_pois/tree_shrine.dmm"
cost = 10
allow_duplicates = FALSE
/datum/map_template/underdark/abandoned_outpost
name = "Underdark Abandonded Outpost"
mappath = 'abandonded_outpost.dmm'
mappath = "maps/tether/submaps/underdark_pois/abandonded_outpost.dmm"
cost = 45
allow_duplicates = FALSE
discard_prob = 35
/datum/map_template/underdark/mimicry
name = "Underdark Mimic Death"
mappath = 'mimicry.dmm'
mappath = "maps/tether/submaps/underdark_pois/mimicry.dmm"
cost = 15
/datum/map_template/underdark/wolf_den
name = "Underdark Wolf Den"
mappath = 'wolf_den.dmm'
mappath = "maps/tether/submaps/underdark_pois/wolf_den.dmm"
cost = 15
/datum/map_template/underdark/puzzle_corridor
name = "Underdark Puzzle Corridor"
mappath = 'puzzle_corridor.dmm'
mappath = "maps/tether/submaps/underdark_pois/puzzle_corridor.dmm"
cost = 10
/*
// Comment out unfinished/unbalanced POI's here
/datum/map_template/underdark/rad_threat
name = "Underdark Rad Threat"
mappath = 'rad_threat.dmm'
mappath = "maps/tether/submaps/underdark_pois/rad_threat.dmm"
cost = 10
/datum/map_template/underdark/broken_engine
name = "Underdark Broken Twin Engine"
mappath = 'broken_engine.dmm'
mappath = "maps/tether/submaps/underdark_pois/broken_engine.dmm"
cost = 10
/datum/map_template/underdark/boss_mob
name = "Underdark Boss Mob Spawn"
mappath = 'boss_mob.dmm'
mappath = "maps/tether/submaps/underdark_pois/boss_mob.dmm"
cost = 60
allow_duplicates = FALSE
/datum/map_template/underdark/whatever_treasure
name = "Some Kinda Treasure" //A name, only visible to admins
mappath = 'hard_mob.dmm' //The .dmm file for this template (in this folder)
mappath = "maps/tether/submaps/underdark_pois/hard_mob.dmm" //The .dmm file for this template (in this folder"
cost = 10 //How 'valuable' this template is
*/
+4 -2
View File
@@ -23,6 +23,7 @@
#include "code\__defines\_click.dm"
#include "code\__defines\_compile_options.dm"
#include "code\__defines\_helpers.dm"
#include "code\__defines\_init.dm"
#include "code\__defines\_lists.dm"
#include "code\__defines\_planes+layers.dm"
#include "code\__defines\_planes+layers_vr.dm"
@@ -2718,10 +2719,11 @@
#include "code\modules\lore_codex\robutt_data\main_robutts.dm"
#include "code\modules\lore_codex\robutt_data\more.dm"
#include "code\modules\makeup\nailpolish.dm"
#include "code\modules\maps\tg\dmm_suite.dm"
#include "code\modules\maps\bapi-dmm\bapi_bindings.dm"
#include "code\modules\maps\bapi-dmm\bapi_dmm_reader.dm"
#include "code\modules\maps\bapi-dmm\bapi_helpers.dm"
#include "code\modules\maps\tg\map_template.dm"
#include "code\modules\maps\tg\map_template_vr.dm"
#include "code\modules\maps\tg\reader.dm"
#include "code\modules\materials\fifty_spawner.dm"
#include "code\modules\materials\fifty_spawner_mats.dm"
#include "code\modules\materials\fifty_spawner_mats_vr.dm"