You can now load the cyberiad with the map-loader

This commit is contained in:
Crazylemon64
2016-07-02 22:50:45 -07:00
parent 0e50e4f27a
commit f2b48c7c67
14 changed files with 167 additions and 102 deletions
+2
View File
@@ -33,6 +33,7 @@ var/global/list/deferred_pipenet_rebuilds = list()
var/pipenetwarnings = 10
var/pipenets_made = 0
/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base)
var/volume = 0
if(istype(base, /obj/machinery/atmospherics/pipe))
@@ -47,6 +48,7 @@ var/pipenetwarnings = 10
addMachineryMember(base)
if(!air)
air = new
// log_startup_progress("Making pipenet [pipenets_made++]")
var/list/possible_expansions = list(base)
while(possible_expansions.len>0)
for(var/obj/machinery/atmospherics/borderline in possible_expansions)
+22 -24
View File
@@ -17,6 +17,11 @@
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold/New()
..()
alpha = 255
icon = null
switch(dir)
if(NORTH)
initialize_directions = EAST|SOUTH|WEST
@@ -27,11 +32,6 @@
if(WEST)
initialize_directions = NORTH|EAST|SOUTH
..()
alpha = 255
icon = null
/obj/machinery/atmospherics/pipe/manifold/initialize()
..()
for(var/D in cardinal)
@@ -101,6 +101,7 @@
if(istype(node3, /obj/machinery/atmospherics/pipe))
qdel(parent)
node3 = null
check_nodes_exist()
update_icon()
..()
@@ -120,29 +121,26 @@
alpha = 255
if(!check_nodes_exist())
return
else
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
underlays.Cut()
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
underlays.Cut()
var/turf/T = get_turf(src)
if(!istype(T)) return
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
var/turf/T = get_turf(src)
if(!istype(T)) return
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
directions -= dir
directions -= dir
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
/obj/machinery/atmospherics/pipe/manifold/update_underlays()
..()
+38 -39
View File
@@ -72,6 +72,7 @@
qdel(parent)
node4 = null
check_nodes_exist()
update_icon()
..()
@@ -93,59 +94,57 @@
return
alpha = 255
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
underlays.Cut()
if(!node1 && !node2 && !node3 && !node4)
var/turf/T = get_turf(src)
new /obj/item/pipe(loc, make_from=src)
for (var/obj/machinery/meter/meter in T)
if (meter.target == src)
new /obj/item/pipe_meter(T)
qdel(meter)
qdel(src)
else
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
underlays.Cut()
/*
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
/*
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
directions -= add_underlay(node1)
directions -= add_underlay(node2)
directions -= add_underlay(node3)
directions -= add_underlay(node4)
directions -= add_underlay(node1)
directions -= add_underlay(node2)
directions -= add_underlay(node3)
directions -= add_underlay(node4)
for(var/D in directions)
add_underlay(,D)
*/
for(var/D in directions)
add_underlay(,D)
*/
var/turf/T = get_turf(src)
if(!istype(T)) return
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
var/node4_direction = get_dir(src, node4)
var/turf/T = get_turf(src)
if(!istype(T)) return
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
var/node4_direction = get_dir(src, node4)
directions -= dir
directions -= dir
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
directions -= add_underlay(T,node4,node4_direction,icon_connect_type)
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
directions -= add_underlay(T,node4,node4_direction,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
/obj/machinery/atmospherics/pipe/manifold4w/update_underlays()
..()
update_icon()
// A check to make sure both nodes exist - self-delete if they aren't present
/obj/machinery/atmospherics/pipe/manifold4w/check_nodes_exist()
if(!node1 && !node2 && !node3 && !node4)
Deconstruct()
return 0 // 0: No nodes exist
// 1: 1-4 nodes exist, we continue existing
return 1
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/initialize()
..()
@@ -244,4 +243,4 @@
color = PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple
color = PIPE_COLOR_PURPLE
color = PIPE_COLOR_PURPLE
@@ -121,7 +121,9 @@
if(istype(node2, /obj/machinery/atmospherics/pipe))
qdel(parent)
node2 = null
check_nodes_exist()
update_icon()
..()
/obj/machinery/atmospherics/pipe/simple/pipeline_expansion()
return list(node1, node2)
@@ -142,8 +144,6 @@
overlays.Cut()
if(!check_nodes_exist()) // such a stupid place for a self-deletion check
return
if(node1 && node2)
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "intact" + icon_connect_type)
else
+6
View File
@@ -93,6 +93,12 @@
to_chat(world, "<span class='danger'>[message]</span>")
log_to_dd(message)
// A logging proc that only outputs after setup is done, to
// help devs test initialization stuff that happens a lot
/proc/log_after_setup(var/message)
if(ticker && ticker.current_state > GAME_STATE_SETTING_UP)
to_chat(world, "<span class='danger'>[message]</span>")
log_to_dd(message)
// Helper procs for building detailed log lines
/proc/datum_info_line(var/datum/d)
+1
View File
@@ -11,6 +11,7 @@ var/global/datum/controller/process/sun/sun
name = "sun"
schedule_interval = 600 // every 60 seconds
sun = src
log_startup_progress("Sun ticker starting up.")
angle = rand (0,360) // the station position to the sun is randomised at round start
rate = rand(50,200)/100 // 50% - 200% of standard rotation
+1
View File
@@ -9,6 +9,7 @@ var/global/datum/controller/process/ticker/tickerProcess
schedule_interval = 20 // every 2 seconds
lastTickerTime = world.timeofday
log_startup_progress("Time ticker starting up.")
if(!ticker)
ticker = new
+2 -1
View File
@@ -8,6 +8,7 @@ var/global/datum/controller/process/timer/timer_master
name = "timer"
schedule_interval = 5 //every 0.5 seconds
timer_master = src
log_startup_progress("Timer process starting up.")
/datum/controller/process/timer/statProcess()
..()
@@ -79,4 +80,4 @@ var/global/datum/controller/process/timer/timer_master
if(event.id == id)
qdel(event)
return 1
return 0
return 0
+1
View File
@@ -1,6 +1,7 @@
/datum/controller/process/vote/setup()
name = "vote"
schedule_interval = 10 // every second
log_startup_progress("Voting ticker starting up.")
/datum/controller/process/vote/doWork()
vote.process()
+21 -16
View File
@@ -11,16 +11,16 @@ var/global/air_processing_killed = 0
var/global/pipe_processing_killed = 0
/datum/controller
var/processing = 0
var/iteration = 0
var/processing_interval = 0
var/processing = 0
var/iteration = 0
var/processing_interval = 0
/datum/controller/proc/recover() // If we are replacing an existing controller (due to a crash) we attempt to preserve as much as we can.
datum/controller/game_controller
var/list/shuttle_list // For debugging and VV
/datum/controller/game_controller
var/list/shuttle_list // For debugging and VV
datum/controller/game_controller/New()
/datum/controller/game_controller/New()
//There can be only one master_controller. Out with the old and in with the new.
if(master_controller != src)
if(istype(master_controller))
@@ -38,14 +38,19 @@ datum/controller/game_controller/New()
if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
datum/controller/game_controller/proc/setup()
/datum/controller/game_controller/proc/setup()
world.tick_lag = config.Ticklag
preloadTemplates()
if(!config.disable_away_missions)
createRandomZlevel()
if(!config.disable_space_ruins)
seedRuins(7, rand(0, 3), /area/space, space_ruins_templates)
var/tm = start_watch()
log_startup_progress("Re-loading the cyberiad...")
maploader.load_map(file("_maps/map_files/cyberiad/cyberiad.dmm"))
late_setup_level(block(locate(1, 1, world.maxz), locate(world.maxx, world.maxy, world.maxz)))
log_startup_progress("Finished loading the cyberiad, took [stop_watch(tm)]s")
// if(!config.disable_away_missions)
// createRandomZlevel()
// if(!config.disable_space_ruins)
// seedRuins(7, rand(0, 3), /area/space, space_ruins_templates)
setup_objects()
setupgenetics()
@@ -57,21 +62,21 @@ datum/controller/game_controller/proc/setup()
populate_spawn_points()
datum/controller/game_controller/proc/setup_objects()
/datum/controller/game_controller/proc/setup_objects()
var/watch = start_watch()
var/count = 0
var/overwatch = start_watch() // Overall.
log_startup_progress("Populating asset cache...")
populate_asset_cache()
log_startup_progress(" Populated [asset_cache.len] assets in [stop_watch(watch)]s.")
log_startup_progress(" Populated [asset_cache.len] assets in [stop_watch(watch)]s.")
watch = start_watch()
log_startup_progress("Initializing objects...")
for(var/atom/movable/object in world)
object.initialize()
count++
log_startup_progress(" Initialized [count] objects in [stop_watch(watch)]s.")
log_startup_progress(" Initialized [count] objects in [stop_watch(watch)]s.")
watch = start_watch()
count = 0
@@ -85,7 +90,7 @@ datum/controller/game_controller/proc/setup_objects()
var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
T.broadcast_status()
count++
log_startup_progress(" Initialized [count] atmospherics machines in [stop_watch(watch)]s.")
log_startup_progress(" Initialized [count] atmospherics machines in [stop_watch(watch)]s.")
watch = start_watch()
count = 0
@@ -93,6 +98,6 @@ datum/controller/game_controller/proc/setup_objects()
for(var/obj/machinery/atmospherics/machine in machines)
machine.build_network()
count++
log_startup_progress(" Initialized [count] pipe networks in [stop_watch(watch)]s.")
log_startup_progress(" Initialized [count] pipes in [stop_watch(watch)]s.")
log_startup_progress("Finished object initializations in [stop_watch(overwatch)]s.")
+46 -15
View File
@@ -24,23 +24,34 @@
return bounds
/datum/map_template/proc/load(turf/T, centered = 0)
var/turf/placement = T
var/min_x = placement.x
var/min_y = placement.y
if(centered)
T = locate(T.x - round(width/2), T.y - round(height/2), T.z)
if(!T)
return
if(T.x+width > world.maxx)
return
if(T.y+height > world.maxy)
return
min_x -= round(width/2)
min_y -= round(height/2)
var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap = 1)
var/max_x = min_x + width - 1
var/max_y = min_y + height - 1
if(!T)
return 0
var/turf/bot_left = locate(max(0, min_x), max(0, min_y), placement.z)
var/turf/top_right = locate(min(world.maxx, max_x), min(world.maxy, max_y), placement.z)
// 1 bigger, to update the turf smoothing
var/turf/ST_bot_left = locate(max(0, min_x-1), max(0, min_y-1), placement.z)
var/turf/ST_top_right = locate(min(world.maxx, max_x+1), min(world.maxy, max_y+1), placement.z)
var/list/bounds = maploader.load_map(get_file(), min_x, min_y, placement.z, cropMap = 1)
if(!bounds)
return 0
late_setup_level(
block(T, locate(T.x + width - 1, T.y + height - 1, T.z)),
block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + width, T.y + height, T.z)))
block(bot_left, top_right),
block(ST_bot_left, ST_top_right))
log_game("[name] loaded at [T.x],[T.y],[T.z]")
log_game("[name] loaded at [min_x],[min_y],[placement.z]")
return 1
/datum/map_template/proc/get_file()
@@ -54,11 +65,31 @@
/datum/map_template/proc/get_affected_turfs(turf/T, centered = 0)
var/turf/placement = T
var/min_x = placement.x
var/min_y = placement.y
if(centered)
var/turf/corner = locate(placement.x - round(width/2), placement.y - round(height/2), placement.z)
if(corner)
placement = corner
return block(placement, locate(placement.x+width-1, placement.y+height-1, placement.z))
min_x -= round(width/2)
min_y -= round(height/2)
var/max_x = min_x + width-1
var/max_y = min_y + height-1
placement = locate(max(min_x,0), max(min_y,0), placement.z)
return block(placement, locate(min(max_x, world.maxx), min(max_y, world.maxy), placement.z))
/datum/map_template/proc/fits_in_map_bounds(turf/T, centered = 0)
var/turf/placement = T
var/min_x = placement.x
var/min_y = placement.y
if(centered)
min_x -= round(width/2)
min_y -= round(height/2)
var/max_x = min_x + width-1
var/max_y = min_y + height-1
if(min_x < 0 || min_y < 0 || max_x > world.maxx || max_y > world.maxy)
return 0
else
return 1
/proc/preloadTemplates(path = "_maps/map_files/templates/") //see master controller setup
+2 -2
View File
@@ -48,7 +48,7 @@
src.scanner = findscanner()
releasecloner()
findcloner()
if(!selected_pod)
if(!selected_pod && pods.len)
selected_pod = pods[1]
/obj/machinery/computer/cloning/proc/findscanner()
@@ -450,4 +450,4 @@
return (scanner && scanner.scan_level > 2)
/obj/machinery/computer/cloning/proc/can_brainscan()
return (scanner && scanner.scan_level > 3)
return (scanner && scanner.scan_level > 3)
@@ -2,6 +2,8 @@
set category = "Debug"
set name = "Map template - Place"
if(!holder)
return
var/datum/map_template/template
var/map = input(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template") as null|anything in map_templates
@@ -13,6 +15,10 @@
if(!T)
return
if(!template.fits_in_map_bounds(T, centered = TRUE))
to_chat(usr, "Map is too large to fit in bounds. Map's dimensions: ([template.width], [template.height])")
return
var/list/preview = list()
for(var/S in template.get_affected_turfs(T,centered = TRUE))
preview += image('icons/turf/overlays.dmi',S,"greenOverlay")
+17 -3
View File
@@ -135,7 +135,13 @@ var/global/dmm_suite/preloader/_preloader = new
CHECK_TICK
qdel(LM)
if(bounds[1] == 1.#INF) // Shouldn't need to check every item
if(bounds[MAP_MINX] == 1.#INF) // Shouldn't need to check every item
log_startup_progress("Min x: bounds[MAP_MINX]")
log_startup_progress("Min y: bounds[MAP_MINY]")
log_startup_progress("Min z: bounds[MAP_MINZ]")
log_startup_progress("Max x: bounds[MAP_MAXX]")
log_startup_progress("Max y: bounds[MAP_MAXY]")
log_startup_progress("Max z: bounds[MAP_MAXZ]")
return null
else
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])))
@@ -258,9 +264,17 @@ var/global/dmm_suite/preloader/_preloader = new
//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
var/underlay
if(istype(T, /turf)) // I blame this on the stupid clown who mis-mapped the solar panels
underlay = T.appearance
T = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf
T.underlays += underlay
if(ispath(members[index],/turf))
T.underlays += underlay
else
log_debug("The maps on tile ([xcrd],[ycrd],[zcrd]) have out-of-order turfs.")
// Make them cry
message_admins("The maps on tile ([xcrd],[ycrd],[zcrd]) have out-of-order turfs.")
index++
//finally instance all remainings objects/mobs