diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 1e88d35e7e..0ae179c1ba 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -470,7 +470,6 @@ GLOBAL_LIST_EMPTY(the_station_areas) return var/away_name - var/datum/space_level/away_level var/answer = input("What kind ? ","Away/VR") as null|anything in (possible_options + "Custom") switch(answer) @@ -482,19 +481,14 @@ GLOBAL_LIST_EMPTY(the_station_areas) return away_name = "[mapfile] custom" to_chat(usr,"Loading [away_name]...") - var/datum/map_template/template = new(mapfile, choice, ztraits) - away_level = template.load_new_z(ztraits) + createSpecificZlevel(choice, ztraits, mapfile) else away_name = answer to_chat(usr,"Loading [away_name]...") - var/datum/map_template/template = new(away_name, choice) - away_level = template.load_new_z(ztraits) + createSpecificZlevel(choice, ztraits, away_name) - message_admins("Admin [key_name_admin(usr)] has loaded [away_name] away mission.") - log_admin("Admin [key_name(usr)] has loaded [away_name] away mission.") - if(!away_level) - message_admins("Loading [away_name] failed!") - return + message_admins("Admin [key_name_admin(usr)] has attempted to load [away_name] away mission.") + log_admin("Admin [key_name(usr)] has attempted to load [away_name] away mission.") /datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override) UNTIL((!z || reservation_ready["[z]"]) && !clearing_reserved_turfs) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 1e2e1fe43c..406e1ced29 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -15,6 +15,14 @@ INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") GLOB.random_zlevels_generated[name] = TRUE +/proc/createSpecificZlevel(name = AWAY_MISSION_NAME, list/traits = list(ZTRAIT_AWAY = TRUE), map) + var/start_time = REALTIMEOFDAY + if(!load_new_z_level(map, name, SOUTH, traits)) + INIT_ANNOUNCE("Failed to load [name]! map filepath: [map]!") + return + INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") + GLOB.random_zlevels_generated[name] = TRUE + /obj/effect/landmark/awaystart name = "away mission spawn" desc = "Randomly picked away mission spawn points." diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 087552fada..b102abb767 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -90,20 +90,25 @@ /datum/map_template/proc/load_new_z(orientation = SOUTH, list/ztraits = src.ztraits || list(ZTRAIT_AWAY = TRUE), centered = TRUE) var/x = centered? max(round((world.maxx - width) / 2), 1) : 1 var/y = centered? max(round((world.maxy - height) / 2), 1) : 1 - + message_admins("d1") var/datum/space_level/level = SSmapping.add_new_zlevel(name, ztraits) + message_admins("d2") var/datum/parsed_map/parsed = load_map(file(mappath), x, y, level.z_value, no_changeturf=(SSatoms.initialized == INITIALIZATION_INSSATOMS), placeOnTop = TRUE, orientation = orientation) + message_admins("d3") var/list/bounds = parsed.bounds if(!bounds) return FALSE repopulate_sorted_areas() - + message_admins("d4") //initialize things that are normally initialized after map load parsed.initTemplateBounds() + message_admins("d5") smooth_zlevel(world.maxz) + message_admins("d6") log_game("Z-level [name] loaded at [x],[y],[world.maxz]") on_map_loaded(world.maxz, parsed.bounds) + message_admins("d7") return level diff --git a/code/modules/mapping/space_management/zlevel_manager.dm b/code/modules/mapping/space_management/zlevel_manager.dm index 6129c5fd2b..c5bd788ecd 100644 --- a/code/modules/mapping/space_management/zlevel_manager.dm +++ b/code/modules/mapping/space_management/zlevel_manager.dm @@ -17,14 +17,20 @@ z_list += S /datum/controller/subsystem/mapping/proc/add_new_zlevel(name, traits = list(), z_type = /datum/space_level) + message_admins("d1_1") SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_Z, args) var/new_z = z_list.len + 1 - if (world.maxz < new_z) + if(world.maxz < new_z) + message_admins("d1_2") world.incrementMaxZ() - CHECK_TICK + message_admins("d1_3") + //CHECK_TICK // TODO: sleep here if the Z level needs to be cleared + message_admins("d1_4") var/datum/space_level/S = new z_type(new_z, name, traits) + message_admins("d1_5") z_list += S + message_admins("d1_6") return S /datum/controller/subsystem/mapping/proc/get_level(z)