diff --git a/code/WorkInProgress/Chinsky/overmap/README.dm b/code/WorkInProgress/Chinsky/overmap/README.dm index 79bff8f1c9..d11ea1fdee 100644 --- a/code/WorkInProgress/Chinsky/overmap/README.dm +++ b/code/WorkInProgress/Chinsky/overmap/README.dm @@ -58,11 +58,15 @@ Currently no modifications were made to interface to display availability of lan Guide to how make new sector ************************************************************* 0.Map -Remember to put a helm console on ship maps. -Remember to define shuttle areas - both for sectors and ships. +Remember to define shuttle areas if you want sector be accessible via shuttles. Currently there are no other ways to reach sectors from ships. In examples, 4x6 shuttle area is used. In case of shuttle area being too big, it will apear in bottom left corner of it. +Remember to put a helm console and engine control console on ship maps. +Ships need engines to move. Currently there are only thermal engines. +Thermal engines are just a unary atmopheric machine, like a vent. They need high-pressure gas input to produce more thrust. + + 1.Metaobject All vars needed for it to work could be set directly in map editor, so in most cases you won't have to define new in code. Remember to set landing_area var for sectors. @@ -76,24 +80,31 @@ Remember to place one on the actual shuttle too, or it won't be able to return f Remember to set landing_type var to ship-side shuttle area type. shuttle_tag can be set to custom name (it shows up in console interface) -4.Tick map in and compile. +5.Engines +Actual engines could be any type of machinery, as long as it creates a ship_engine datum for itself. + +6.Tick map in and compile. Sector should appear on overmap (in random place if you didn't set mapx,mapy) TODO: -sector-to-ship shuttles. -ship-ship interactions -helm console interface: - current coordinates - list of known locations - autopilot - manual control more mechanics to moving ship: - overmap movement delay - engine objects - 'moving stars' effect + actually working engine objects + unary atmospheric machinery + give more thrust the more pressure gas has + ships have mass var, which is used to caalculate how much acceleration those engines give better space travel / stragglers handling shuttle console: - showing if shuttle has nowhere to be sent to + checking occupied pad or not with docking controllers ?landing pad size detection +non-zlevel overmap objects + field generator + meteor fields + speed-based chance for a rock in the ship + debris fields + speed-based chance of + debirs in the ship + a drone + EMP + nebulaes */ \ No newline at end of file diff --git a/code/WorkInProgress/Chinsky/overmap/_defines.dm b/code/WorkInProgress/Chinsky/overmap/_defines.dm new file mode 100644 index 0000000000..dfc0881ed5 --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/_defines.dm @@ -0,0 +1,35 @@ +//Zlevel where overmap objects should be +#define OVERMAP_ZLEVEL 1 +//How far from the edge of overmap zlevel could randomly placed objects spawn +#define OVERMAP_EDGE 7 + +//list used to track which zlevels are being 'moved' by the proc below +var/list/moving_levels = list() +//Proc to 'move' stars in spess +//yes it looks ugly, but it should only fire when state actually change. +//null direction stops movement +proc/toggle_move_stars(zlevel, direction) + if(!zlevel) + return + + var/gen_dir = null + if(direction & (NORTH|SOUTH)) + gen_dir += "ns" + else if(direction & (EAST|WEST)) + gen_dir += "ew" + if(!direction) + gen_dir = null + + if (moving_levels["zlevel"] != gen_dir) + moving_levels["zlevel"] = gen_dir + for(var/turf/space/S in world) + if(S.z == zlevel) + spawn(0) + var/turf/T = S + if(!gen_dir) + T.icon_state = "[((T.x + T.y) ^ ~(T.x * T.y) + T.z) % 25]" + else + T.icon_state = "speedspace_[gen_dir]_[rand(1,15)]" + for(var/atom/movable/AM in T) + if (!AM.anchored) + AM.throw_at(get_step(T,reverse_direction(direction)), 5, 1) \ No newline at end of file diff --git a/code/WorkInProgress/Chinsky/overmap/helm.dm b/code/WorkInProgress/Chinsky/overmap/helm.dm deleted file mode 100644 index 8d5600b190..0000000000 --- a/code/WorkInProgress/Chinsky/overmap/helm.dm +++ /dev/null @@ -1,161 +0,0 @@ -/obj/machinery/computer/helm - name = "helm control console" - icon_state = "id" - var/obj/effect/map/ship/linked //connected overmap object - var/autopilot = 0 - var/manual_control = 0 - var/dx //desitnation - var/dy //coordinates - var/ship_last_move = 0 - var/ship_move_delay = 10 - - -/obj/machinery/computer/helm/initialize() - linked = map_sectors["[z]"] - if (!linked) - testing("Helm console at level [z] was unable to find a corresponding overmap object.") - else - testing("Helm console at level [z] found a corresponding overmap object '[linked.name]'.") - -/obj/machinery/computer/helm/process() - ..() - if (autopilot && dx && dy && world.time > ship_last_move + ship_move_delay) - ship_last_move = world.time - var/turf/T = locate(dx,dy,1) - if (T) - step_towards(linked,T) - return - -/obj/machinery/computer/helm/relaymove(var/mob/user, direction) - if(manual_control && linked) - if (world.time > ship_last_move + ship_move_delay) - linked.relaymove(user,direction) - ship_last_move = world.time - return 1 - -/obj/machinery/computer/helm/check_eye(var/mob/user as mob) - if (!manual_control) - return null - if (!get_dist(user, src) > 1 || user.blinded || !linked ) - return null - user.reset_view(linked) - return 1 - -/obj/machinery/computer/helm/attack_hand(var/mob/user as mob) - if(..()) - user.unset_machine() - manual_control = 0 - return - - if(!isAI(user)) - user.set_machine(src) - - var/dat = "" - if(!linked) - dat = "
Could not get navigation data!
" - else - dat += "" - dat += "
Current sector:[linked.current_sector ? linked.current_sector.name : "Deep Space"]" - dat += "
Sector information:[linked.current_sector ? linked.current_sector.desc : "Not Available"]" - dat += "
Current coordinates:\[[linked.x], [linked.y]\]" - dat += "
Current destination:" - if (dx && dy) - dat += "\[[dx], " - dat += "[dy]\]" - else - dat += "None" - dat += "
" - - dat += "


" - - dat += "Known locations:
" - dat += "" - for (var/lvl in map_sectors) - var/obj/effect/map/sector/S = map_sectors[lvl] - if (istype(S)) - dat += "" - dat += "
[S.name]:\[[S.x], [S.y]\]Plot course
" - - dat += "



" - - dat += "" - dat += "
Autopilot:[autopilot ? "Engaged" : "Disengaged"]Reset desetination" - dat += "
Manual control:[manual_control ? "Engaged" : "Disengaged"]" - dat += "
" - user << browse("Helm Control[dat]", "window=helm") - onclose(user, "helm") - return - - -/obj/machinery/computer/helm/Topic(href, href_list) - if(..()) - return - - if (!linked) - return - - if (href_list["setx"]) - var/newx = input("Input new destiniation x coordinate", "Coordinate input", dx) as num|null - if (newx) - dx = Clamp(newx, 1, world.maxx) - - if (href_list["sety"]) - var/newy = input("Input new destiniation y coordinate", "Coordinate input", dy) as num|null - if (newy) - dy = Clamp(newy, 1, world.maxy) - - if (href_list["x"] && href_list["y"]) - dx = text2num(href_list["x"]) - dy = text2num(href_list["y"]) - - if (href_list["reset"]) - dx = 0 - dy = 0 - - if (href_list["apilot"]) - autopilot = !autopilot - - if (href_list["manual"]) - manual_control = !manual_control - autopilot = 0 - - add_fingerprint(usr) - updateUsrDialog() - -//Shuttle controller computer for shuttles going from ship to sectors - -/obj/machinery/computer/shuttle_control/explore - name = "exploration shuttle console" - shuttle_tag = "Exploration" - req_access = list() - var/landing_type //area for shuttle ship-side - -/obj/machinery/computer/shuttle_control/explore/initialize() - ..() - shuttle_tag = "[shuttle_tag]-[z]" - if(!shuttle_controller.shuttles[shuttle_tag]) - var/datum/shuttle/ferry/shuttle = new() - shuttle.warmup_time = 10 - shuttle.area_station = locate(landing_type) - shuttle.area_offsite = shuttle.area_station - shuttle_controller.shuttles[shuttle_tag] = shuttle - shuttle_controller.process_shuttles += shuttle - testing("Exploration shuttle '[shuttle_tag]' at zlevel [z] successfully added.") - -/obj/machinery/computer/shuttle_control/explore/proc/update_destination() - if(shuttle_controller.shuttles[shuttle_tag]) - var/obj/effect/map/ship/S = map_sectors["[z]"] - if (!istype(S)) - return - var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] - if(S && S.current_sector) - var/obj/effect/map/M = S.current_sector - shuttle.area_offsite = M.shuttle_landing - testing("Shuttle controller now sends shuttle to [M]") - else - shuttle.area_offsite = shuttle.area_station - shuttle_controller.shuttles[shuttle_tag] = shuttle - -/obj/machinery/computer/shuttle_control/explore/attack_hand(user as mob) - update_destination() - ..() \ No newline at end of file diff --git a/code/WorkInProgress/Chinsky/overmap/sectors.dm b/code/WorkInProgress/Chinsky/overmap/sectors.dm index 9c80cfc2ac..9e1635a960 100644 --- a/code/WorkInProgress/Chinsky/overmap/sectors.dm +++ b/code/WorkInProgress/Chinsky/overmap/sectors.dm @@ -1,4 +1,4 @@ -#define OVERMAP_ZLEVEL 1 + //=================================================================================== //Hook for building overmap //=================================================================================== @@ -29,6 +29,7 @@ var/global/list/map_sectors = list() var/zlevel var/mapx //coordinates on the var/mapy //overmap zlevel + var/known = 1 /obj/effect/mapinfo/New() tag = "sector[z]" @@ -43,9 +44,6 @@ var/global/list/map_sectors = list() name = "generic ship" obj_type = /obj/effect/map/ship -/obj/effect/mapinfo/ship/relaymove(var/mob/user, direction) - step(src,direction) - //=================================================================================== //Overmap object representing zlevel @@ -57,17 +55,19 @@ var/global/list/map_sectors = list() icon_state = "sheet-plasteel" var/map_z = 0 var/area/shuttle/shuttle_landing + var/always_known = 1 /obj/effect/map/New(var/obj/effect/mapinfo/data) map_z = data.zlevel name = data.name + always_known = data.known if (data.icon != 'icons/mob/screen1.dmi') icon = data.icon icon_state = data.icon_state if(data.desc) desc = data.desc - var/new_x = data.mapx ? data.mapx : rand(2,world.maxx-2) - var/new_y = data.mapy ? data.mapy : rand(2,world.maxy-2) + var/new_x = data.mapx ? data.mapx : rand(OVERMAP_EDGE, world.maxx - OVERMAP_EDGE) + var/new_y = data.mapy ? data.mapy : rand(OVERMAP_EDGE, world.maxy - OVERMAP_EDGE) loc = locate(new_x, new_y, OVERMAP_ZLEVEL) if(data.landing_area) @@ -93,13 +93,3 @@ var/global/list/map_sectors = list() name = "generic sector" desc = "Sector with some stuff in it." anchored = 1 - -/obj/effect/map/ship - name = "generic ship" - desc = "Space faring vessel." - icon_state = "sheet-sandstone" - density = 1 - var/obj/effect/map/current_sector - -/obj/effect/map/ship/relaymove(mob/user, direction) - step(src,direction) diff --git a/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm b/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm new file mode 100644 index 0000000000..07d6a4579b --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm @@ -0,0 +1,99 @@ +//Engine control and monitoring console + +/obj/machinery/computer/engines + name = "engines control console" + icon_state = "id" + var/state = "status" + var/list/engines = list() + var/obj/effect/map/ship/linked + +/obj/machinery/computer/engines/initialize() + linked = map_sectors["[z]"] + if (linked) + if (!linked.eng_control) + linked.eng_control = src + testing("Engines console at level [z] found a corresponding overmap object '[linked.name]'.") + else + testing("Engines console at level [z] was unable to find a corresponding overmap object.") + + for(var/datum/ship_engine/E in engines) + if (E.zlevel == z && !(E in engines)) + engines += E + +/obj/machinery/computer/engines/attack_hand(var/mob/user as mob) + if(..()) + user.unset_machine() + return + + if(!isAI(user)) + user.set_machine(src) + + ui_interact(user) + +/obj/machinery/computer/engines/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + if(!linked) + return + + var/data[0] + data["state"] = state + + var/list/enginfo[0] + for(var/datum/ship_engine/E in engines) + var/list/rdata[0] + rdata["eng_type"] = E.name + rdata["eng_on"] = E.is_on() + rdata["eng_thrust"] = E.get_thrust() + rdata["eng_thrust_limiter"] = round(E.get_thrust_limit()*100) + rdata["eng_status"] = E.get_status() + rdata["eng_reference"] = "\ref[E]" + enginfo.Add(list(rdata)) + + data["engines_info"] = enginfo + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "engines_control.tmpl", "[linked.name] Engines Control", 380, 530) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/engines/Topic(href, href_list) + if(..()) + return + + if(href_list["state"]) + state = href_list["state"] + + if(href_list["engine"]) + if(href_list["set_limit"]) + var/datum/ship_engine/E = locate(href_list["engine"]) + var/newlim = input("Input new thrust limit (0..100)", "Thrust limit", E.get_thrust_limit()) as num + var/limit = Clamp(newlim/100, 0, 1) + if(E) + E.set_thrust_limit(limit) + + if(href_list["limit"]) + var/datum/ship_engine/E = locate(href_list["engine"]) + var/limit = Clamp(E.get_thrust_limit() + text2num(href_list["limit"]), 0, 1) + if(E) + E.set_thrust_limit(limit) + + if(href_list["toggle"]) + var/datum/ship_engine/E = locate(href_list["engine"]) + if(E) + E.toggle() + + add_fingerprint(usr) + updateUsrDialog() + +/obj/machinery/computer/engines/proc/burn() + if(engines.len == 0) + return 0 + var/res = 0 + for(var/datum/ship_engine/E in engines) + res |= E.burn() + return res + +/obj/machinery/computer/engines/proc/get_total_thrust() + for(var/datum/ship_engine/E in engines) + . += E.get_thrust() diff --git a/code/WorkInProgress/Chinsky/overmap/ships/computers/helm.dm b/code/WorkInProgress/Chinsky/overmap/ships/computers/helm.dm new file mode 100644 index 0000000000..f81e569abc --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/ships/computers/helm.dm @@ -0,0 +1,174 @@ +/obj/machinery/computer/helm + name = "helm control console" + icon_state = "id" + var/state = "status" + var/obj/effect/map/ship/linked //connected overmap object + var/autopilot = 0 + var/manual_control = 0 + var/list/known_sectors = list() + var/dx //desitnation + var/dy //coordinates + +/obj/machinery/computer/helm/initialize() + linked = map_sectors["[z]"] + if (linked) + if(!linked.nav_control) + linked.nav_control = src + testing("Helm console at level [z] found a corresponding overmap object '[linked.name]'.") + else + testing("Helm console at level [z] was unable to find a corresponding overmap object.") + + for(var/level in map_sectors) + var/obj/effect/map/sector/S = map_sectors["[level]"] + if (istype(S) && S.always_known) + var/datum/data/record/R = new() + R.fields["name"] = S.name + R.fields["x"] = S.x + R.fields["y"] = S.y + known_sectors += R + +/obj/machinery/computer/helm/process() + ..() + if (autopilot && dx && dy) + var/turf/T = locate(dx,dy,1) + if(linked.loc == T) + if(linked.is_still()) + autopilot = 0 + else + linked.decelerate() + + var/brake_path = linked.get_brake_path() + + if(get_dist(linked.loc, T) > brake_path) + linked.accelerate(get_dir(linked.loc, T)) + else + linked.decelerate() + + return + +/obj/machinery/computer/helm/relaymove(var/mob/user, direction) + if(manual_control && linked) + linked.relaymove(user,direction) + return 1 + +/obj/machinery/computer/helm/check_eye(var/mob/user as mob) + if (!manual_control) + return null + if (!get_dist(user, src) > 1 || user.blinded || !linked ) + return null + user.reset_view(linked) + return 1 + +/obj/machinery/computer/helm/attack_hand(var/mob/user as mob) + if(..()) + user.unset_machine() + manual_control = 0 + return + + if(!isAI(user)) + user.set_machine(src) + + ui_interact(user) + +/obj/machinery/computer/helm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + if(!linked) + return + + var/data[0] + data["state"] = state + + data["sector"] = linked.current_sector ? linked.current_sector.name : "Deep Space" + data["sector_info"] = linked.current_sector ? linked.current_sector.desc : "Not Available" + data["s_x"] = linked.x + data["s_y"] = linked.y + data["dest"] = dy && dx + data["d_x"] = dx + data["d_y"] = dy + data["speed"] = linked.get_speed() + data["accel"] = round(linked.get_acceleration()) + data["heading"] = linked.get_heading() ? dir2angle(linked.get_heading()) : 0 + data["autopilot"] = autopilot + data["manual_control"] = manual_control + + var/list/locations[0] + for (var/datum/data/record/R in known_sectors) + var/list/rdata[0] + rdata["name"] = R.fields["name"] + rdata["x"] = R.fields["x"] + rdata["y"] = R.fields["y"] + rdata["reference"] = "\ref[R]" + locations.Add(list(rdata)) + + data["locations"] = locations + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "helm.tmpl", "[linked.name] Helm Control", 380, 530) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/helm/Topic(href, href_list) + if(..()) + return + + if (!linked) + return + + if (href_list["add"]) + var/datum/data/record/R = new() + var/sec_name = input("Input naviation entry name", "New navigation entry", "Sector #[known_sectors.len]") as text + if(!sec_name) + sec_name = "Sector #[known_sectors.len]" + R.fields["name"] = sec_name + switch(href_list["add"]) + if("current") + R.fields["x"] = linked.x + R.fields["y"] = linked.y + if("new") + var/newx = input("Input new entry x coordinate", "Coordinate input", linked.x) as num + R.fields["x"] = Clamp(newx, 1, world.maxx) + var/newy = input("Input new entry y coordinate", "Coordinate input", linked.y) as num + R.fields["y"] = Clamp(newy, 1, world.maxy) + known_sectors += R + + if (href_list["remove"]) + var/datum/data/record/R = locate(href_list["remove"]) + known_sectors.Remove(R) + + if (href_list["setx"]) + var/newx = input("Input new destiniation x coordinate", "Coordinate input", dx) as num|null + if (newx) + dx = Clamp(newx, 1, world.maxx) + + if (href_list["sety"]) + var/newy = input("Input new destiniation y coordinate", "Coordinate input", dy) as num|null + if (newy) + dy = Clamp(newy, 1, world.maxy) + + if (href_list["x"] && href_list["y"]) + dx = text2num(href_list["x"]) + dy = text2num(href_list["y"]) + + if (href_list["reset"]) + dx = 0 + dy = 0 + + if (href_list["move"]) + var/ndir = text2num(href_list["move"]) + linked.relaymove(usr, ndir) + + if (href_list["brake"]) + linked.decelerate() + + if (href_list["apilot"]) + autopilot = !autopilot + + if (href_list["manual"]) + manual_control = !manual_control + + if (href_list["state"]) + state = href_list["state"] + add_fingerprint(usr) + updateUsrDialog() + diff --git a/code/WorkInProgress/Chinsky/overmap/ships/computers/shuttle.dm b/code/WorkInProgress/Chinsky/overmap/ships/computers/shuttle.dm new file mode 100644 index 0000000000..c63ad2d763 --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/ships/computers/shuttle.dm @@ -0,0 +1,139 @@ +//Shuttle controller computer for shuttles going between sectors +/datum/shuttle/ferry/var/range = 0 //how many overmap tiles can shuttle go, for picking destinatiosn and returning. +/obj/machinery/computer/shuttle_control/explore + name = "exploration shuttle console" + shuttle_tag = "Exploration" + req_access = list() + var/landing_type //area for shuttle ship-side + var/obj/effect/map/destination //current destination + var/obj/effect/map/home //current destination + +/obj/machinery/computer/shuttle_control/explore/initialize() + ..() + home = map_sectors["[z]"] + shuttle_tag = "[shuttle_tag]-[z]" + if(!shuttle_controller.shuttles[shuttle_tag]) + var/datum/shuttle/ferry/shuttle = new() + shuttle.warmup_time = 10 + shuttle.area_station = locate(landing_type) + shuttle.area_offsite = shuttle.area_station + shuttle_controller.shuttles[shuttle_tag] = shuttle + shuttle_controller.process_shuttles += shuttle + testing("Exploration shuttle '[shuttle_tag]' at zlevel [z] successfully added.") + +//Sets destination to new sector. Can be null. +/obj/machinery/computer/shuttle_control/explore/proc/update_destination(var/obj/effect/map/D) + destination = D + if(destination && shuttle_controller.shuttles[shuttle_tag]) + var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] + shuttle.area_offsite = destination.shuttle_landing + testing("Shuttle controller [shuttle_tag] now sends shuttle to [destination]") + shuttle_controller.shuttles[shuttle_tag] = shuttle + +//Gets all sectors with landing zones in shuttle's range +/obj/machinery/computer/shuttle_control/explore/proc/get_possible_destinations() + var/list/res = list() + var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] + for (var/obj/effect/map/S in orange(shuttle.range, home)) + if(S.shuttle_landing) + res += S + return res + +//Checks if current destination is still reachable +/obj/machinery/computer/shuttle_control/explore/proc/check_destination() + var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] + return shuttle && destination && get_dist(home, destination) <= shuttle.range + +/obj/machinery/computer/shuttle_control/explore/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + var/data[0] + var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] + if (!istype(shuttle)) + return + + //If we are already there, or can't reach place anymore, reset destination + if(!shuttle.location && !check_destination()) + destination = null + + //check if shuttle can fly at all + var/can_go = !isnull(destination) + var/current_destination = destination ? destination.name : "None" + //shuttle doesn't need destination set to return home, as long as it's in range. + if(shuttle.location) + current_destination = "Return" + var/area/offsite = shuttle.area_offsite + var/obj/effect/map/cur_loc = map_sectors["[offsite.z]"] + can_go = (get_dist(home,cur_loc) <= shuttle.range) + + //disable picking locations if there are none, or shuttle is already off-site + var/list/possible_d = get_possible_destinations() + var/can_pick = !shuttle.location && possible_d.len + + var/shuttle_state + switch(shuttle.moving_status) + if(SHUTTLE_IDLE) shuttle_state = "idle" + if(SHUTTLE_WARMUP) shuttle_state = "warmup" + if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit" + + var/shuttle_status + switch (shuttle.process_state) + if(IDLE_STATE) + if (shuttle.in_use) + shuttle_status = "Busy." + else if (!shuttle.location) + shuttle_status = "Standing-by at station." + else + shuttle_status = "Standing-by at offsite location." + if(WAIT_LAUNCH) + shuttle_status = "Shuttle has recieved command and will depart shortly." + if(WAIT_ARRIVE) + shuttle_status = "Proceeding to destination." + if(WAIT_FINISH) + shuttle_status = "Arriving at destination now." + + data = list( + "destination_name" = current_destination, + "can_pick" = can_pick, + "shuttle_status" = shuttle_status, + "shuttle_state" = shuttle_state, + "has_docking" = shuttle.docking_controller? 1 : 0, + "docking_status" = shuttle.docking_controller? shuttle.docking_controller.get_docking_status() : null, + "docking_override" = shuttle.docking_controller? shuttle.docking_controller.override_enabled : null, + "can_launch" = can_go && shuttle.can_launch(), + "can_cancel" = can_go && shuttle.can_cancel(), + "can_force" = can_go && shuttle.can_force(), + ) + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + + if (!ui) + ui = new(user, src, ui_key, "shuttle_control_console_exploration.tmpl", "[shuttle_tag] Shuttle Control", 470, 310) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/computer/shuttle_control/explore/Topic(href, href_list) + if(..()) + return + + usr.set_machine(src) + src.add_fingerprint(usr) + + var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] + if (!istype(shuttle)) + return + + if(href_list["pick"]) + var/obj/effect/map/self = map_sectors["[z]"] + if(self) + var/list/possible_d = get_possible_destinations() + var/obj/effect/map/D + if(possible_d.len) + D = input("Choose shuttle destination", "Shuttle Destination") as null|anything in possible_d + update_destination(D) + + if(href_list["move"]) + shuttle.launch(src) + if(href_list["force"]) + shuttle.force_launch(src) + else if(href_list["cancel"]) + shuttle.cancel_launch(src) \ No newline at end of file diff --git a/code/WorkInProgress/Chinsky/overmap/ships/engines/engine.dm b/code/WorkInProgress/Chinsky/overmap/ships/engines/engine.dm new file mode 100644 index 0000000000..80690aa84d --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/ships/engines/engine.dm @@ -0,0 +1,60 @@ +//Engine component object + +var/list/ship_engines = list() +/datum/ship_engine + var/name = "ship engine" + var/obj/machinery/engine //actual engine object + var/zlevel = 0 + +/datum/ship_engine/New(var/obj/machinery/holder) + engine = holder + zlevel = holder.z + for(var/obj/machinery/computer/engines/E in machines) + if (E.z == zlevel && !(src in E.engines)) + E.engines += src + break + +//Tries to fire the engine. If successfull, returns 1 +/datum/ship_engine/proc/burn() + if(!engine) + die() + return 1 + +//Returns status string for this engine +/datum/ship_engine/proc/get_status() + if(!engine) + die() + return "All systems nominal" + +/datum/ship_engine/proc/get_thrust() + if(!engine) + die() + return 100 + +//Sets thrust limiter, a number between 0 and 1 +/datum/ship_engine/proc/set_thrust_limit(var/new_limit) + if(!engine) + die() + return 1 + +/datum/ship_engine/proc/get_thrust_limit() + if(!engine) + die() + return 1 + +/datum/ship_engine/proc/is_on() + if(!engine) + die() + return 1 + +/datum/ship_engine/proc/toggle() + if(!engine) + die() + return 1 + +/datum/ship_engine/proc/die() + for(var/obj/machinery/computer/engines/E in machines) + if (E.z == zlevel) + E.engines -= src + break + del(src) \ No newline at end of file diff --git a/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm b/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm new file mode 100644 index 0000000000..b26e721638 --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/ships/engines/thermal.dm @@ -0,0 +1,99 @@ +//Thermal nozzle engine +/datum/ship_engine/thermal + name = "thermal engine" + +/datum/ship_engine/thermal/get_status() + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + return "Fuel pressure: [E.air_contents.return_pressure()]" + +/datum/ship_engine/thermal/get_thrust() + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + if(!is_on()) + return 0 + var/pressurized_coef = E.air_contents.return_pressure()/E.effective_pressure + return round(E.thrust_limit * E.nominal_thrust * pressurized_coef) + +/datum/ship_engine/thermal/burn() + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + return E.burn() + +/datum/ship_engine/thermal/set_thrust_limit(var/new_limit) + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + E.thrust_limit = new_limit + +/datum/ship_engine/thermal/get_thrust_limit() + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + return E.thrust_limit + +/datum/ship_engine/thermal/is_on() + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + return E.on + +/datum/ship_engine/thermal/toggle() + ..() + var/obj/machinery/atmospherics/unary/engine/E = engine + E.on = !E.on + +//Actual thermal nozzle engine object + +/obj/machinery/atmospherics/unary/engine + name = "engine nozzle" + desc = "Simple thermal nozzle, uses heated gast to propell the ship." + icon = 'icons/obj/ship_engine.dmi' + icon_state = "nozzle" + var/on = 1 + var/thrust_limit = 1 //Value between 1 and 0 to limit the resulting thrust + var/nominal_thrust = 3000 + var/effective_pressure = 3000 + var/datum/ship_engine/thermal/controller + +/obj/machinery/atmospherics/unary/engine/initialize() + ..() + controller = new(src) + +/obj/machinery/atmospherics/unary/engine/Del() + ..() + controller.die() + +/obj/machinery/atmospherics/unary/engine/proc/burn() + if (!on) + return + if(air_contents.temperature > 0) + var/transfer_moles = 100 * air_contents.volume/max(air_contents.temperature * R_IDEAL_GAS_EQUATION, 0,01) + transfer_moles = round(thrust_limit * transfer_moles, 0.01) + if(transfer_moles > air_contents.total_moles) + on = !on + return 0 + + var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) + + loc.assume_air(removed) + if(air_contents.temperature > PHORON_MINIMUM_BURN_TEMPERATURE) + var/exhaust_dir = reverse_direction(dir) + var/turf/T = get_step(src,exhaust_dir) + if(T) + new/obj/effect/engine_exhaust(T,exhaust_dir,air_contents.temperature) + return 1 + +//Exhaust effect +/obj/effect/engine_exhaust + name = "engine exhaust" + icon = 'icons/effects/effects.dmi' + icon_state = "exhaust" + anchored = 1 + + New(var/turf/nloc, var/ndir, var/temp) + dir = ndir + ..(nloc) + + if(nloc) + nloc.hotspot_expose(temp,125) + + spawn(20) + loc = null \ No newline at end of file diff --git a/code/WorkInProgress/Chinsky/overmap/ships/ship.dm b/code/WorkInProgress/Chinsky/overmap/ships/ship.dm new file mode 100644 index 0000000000..b080c41b07 --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/ships/ship.dm @@ -0,0 +1,105 @@ +/obj/effect/map/ship + name = "generic ship" + desc = "Space faring vessel." + icon_state = "sheet-sandstone" + var/vessel_mass = 9000 //tonnes, random number + var/default_delay = 60 + var/list/speed = list(0,0) + var/last_burn = 0 + var/list/last_movement = list(0,0) + var/fore_dir = NORTH + + var/obj/effect/map/current_sector + var/obj/machinery/computer/helm/nav_control + var/obj/machinery/computer/engines/eng_control + +/obj/effect/map/ship/initialize() + for(var/obj/machinery/computer/engines/E in machines) + if (E.z == map_z) + eng_control = E + break + for(var/obj/machinery/computer/helm/H in machines) + if (H.z == map_z) + nav_control = H + break + processing_objects.Add(src) + +/obj/effect/map/ship/relaymove(mob/user, direction) + accelerate(direction) + +/obj/effect/map/ship/proc/is_still() + return !(speed[1] || speed[2]) + +/obj/effect/map/ship/proc/get_acceleration() + return eng_control.get_total_thrust()/vessel_mass + +/obj/effect/map/ship/proc/get_speed() + return round(sqrt(speed[1]*speed[1] + speed[2]*speed[2])) + +/obj/effect/map/ship/proc/get_heading() + var/res = 0 + if(speed[1]) + if(speed[1] > 0) + res |= EAST + else + res |= WEST + if(speed[2]) + if(speed[2] > 0) + res |= NORTH + else + res |= SOUTH + return res + +/obj/effect/map/ship/proc/adjust_speed(n_x, n_y) + speed[1] = Clamp(speed[1] + n_x, -default_delay, default_delay) + speed[2] = Clamp(speed[2] + n_y, -default_delay, default_delay) + if(is_still()) + toggle_move_stars(map_z) + else + toggle_move_stars(map_z, fore_dir) + +/obj/effect/map/ship/proc/can_burn() + if (!eng_control) + return 0 + if (world.time < last_burn + 10) + return 0 + if (!eng_control.burn()) + return 0 + return 1 + +/obj/effect/map/ship/proc/get_brake_path() + if(!get_acceleration()) + return INFINITY + return max(abs(speed[1]),abs(speed[2]))/get_acceleration() + +/obj/effect/map/ship/proc/decelerate() + if(!is_still() && can_burn()) + if (speed[1]) + adjust_speed(-SIGN(speed[1]) * min(get_acceleration(),speed[1]), 0) + if (speed[2]) + adjust_speed(0, -SIGN(speed[2]) * min(get_acceleration(),speed[2])) + last_burn = world.time + +/obj/effect/map/ship/proc/accelerate(direction) + if(can_burn()) + last_burn = world.time + + if(direction & EAST) + adjust_speed(get_acceleration(), 0) + if(direction & WEST) + adjust_speed(-get_acceleration(), 0) + if(direction & NORTH) + adjust_speed(0, get_acceleration()) + if(direction & SOUTH) + adjust_speed(0, -get_acceleration()) + +/obj/effect/map/ship/process() + if(!is_still()) + var/list/deltas = list(0,0) + for(var/i=1, i<=2, i++) + if(speed[i] && world.time > last_movement[i] + default_delay - speed[i]) + deltas[i] = speed[i] > 0 ? 1 : -1 + last_movement[i] = world.time + var/turf/newloc = locate(x + deltas[1], y + deltas[2], z) + if(newloc) + Move(newloc) \ No newline at end of file diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 7c86950ba6..67a1c2ce29 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/obj/ship_engine.dmi b/icons/obj/ship_engine.dmi new file mode 100644 index 0000000000..76546be416 Binary files /dev/null and b/icons/obj/ship_engine.dmi differ diff --git a/maps/overmap/bearcat/bearcat.dm b/maps/overmap/bearcat/bearcat.dm index 87b43bf4ef..801d2c7c18 100644 --- a/maps/overmap/bearcat/bearcat.dm +++ b/maps/overmap/bearcat/bearcat.dm @@ -105,6 +105,11 @@ icon_state = "tcomsatcham" music = list('sound/ambience/signal.ogg') +/area/ship/scrap/shuttle/ + requires_power = 0 + luminosity = 1 + lighting_use_dynamic = 0 + /area/ship/scrap/shuttle/ingoing name = "\improper Docking Bay #1" icon_state = "tcomsatcham" diff --git a/maps/overmap/bearcat/bearcat.dmm b/maps/overmap/bearcat/bearcat.dmm index 2814abb50d..be6541ec91 100644 --- a/maps/overmap/bearcat/bearcat.dmm +++ b/maps/overmap/bearcat/bearcat.dmm @@ -9,13 +9,13 @@ "ai" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/bluegrid,/area/ship/scrap/command) "aj" = (/obj/effect/mapinfo/ship/bearcat,/turf/space,/area) "ak" = (/obj/structure/table,/obj/machinery/light,/obj/item/device/radio,/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor{tag = "icon-gcircuit (SOUTHEAST)"; icon_state = "gcircuit"; dir = 6},/area/ship/scrap/command) -"al" = (/obj/structure/stool/bed/chair/comfy/teal{tag = "icon-comfychair_teal (NORTH)"; icon_state = "comfychair_teal"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark/start{name = "Captain"},/turf/simulated/floor{tag = "icon-gcircuitoff"; icon_state = "gcircuitoff"; dir = 2},/area/ship/scrap/command) +"al" = (/obj/structure/stool/bed/chair/comfy/teal{tag = "icon-comfychair_teal (NORTH)"; icon_state = "comfychair_teal"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark/start{name = "Captain"},/turf/simulated/floor{tag = "icon-gcircuitoff"; icon_state = "gcircuitoff"; dir = 2},/area/ship/scrap/command) "am" = (/obj/structure/table,/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/door_control{id = "scraplock"; name = "External Lockdown"},/turf/simulated/floor{tag = "icon-gcircuit (SOUTHEAST)"; icon_state = "gcircuit"; dir = 6},/area/ship/scrap/command) "an" = (/turf/simulated/wall/r_wall,/area/ship/scrap/command) "ao" = (/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor,/area/ship/scrap/command) "ap" = (/turf/simulated/wall/r_wall,/area/ship/scrap/comms) "aq" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/comms) -"ar" = (/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) +"ar" = (/obj/machinery/light_switch{pixel_x = 28},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) "as" = (/turf/simulated/wall/r_wall,/area/ship/scrap/command/captain) "at" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/command/captain) "au" = (/obj/machinery/account_database,/turf/simulated/floor/bluegrid,/area/ship/scrap/comms) @@ -29,7 +29,7 @@ "aC" = (/obj/machinery/telecomms/allinone,/turf/simulated/floor/bluegrid,/area/ship/scrap/comms) "aD" = (/obj/machinery/door/window/westleft,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; level = 2; on = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/ship/scrap/comms) "aE" = (/obj/machinery/door/airlock/hatch,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8; level = 1},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/comms) -"aF" = (/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold4w{level = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) +"aF" = (/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) "aG" = (/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command/captain) "aH" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8; level = 1},/obj/structure/cable{tag = "icon-6-8"; icon_state = "6-8"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) "aI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 1; on = 1},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) @@ -339,7 +339,7 @@ "gA" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) "gB" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) "gC" = (/obj/machinery/pipedispenser,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) -"gD" = (/obj/machinery/power/apc{dir = 1; name = "Maintenance APC"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) +"gD" = (/obj/machinery/power/apc{dir = 1; name = "Maintenance APC"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/disposalpipe/segment,/obj/machinery/computer/engines,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) "gE" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/alarm{pixel_y = 32},/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) "gF" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/closet/toolcloset,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) "gG" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) @@ -381,17 +381,27 @@ "hq" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/atmos) "hr" = (/obj/structure/cable{tag = "icon-5-6"; icon_state = "5-6"},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/engine) "hs" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{tag = "icon-pipe-t (NORTH)"; icon_state = "pipe-t"; dir = 1},/turf/space,/area) -"ht" = (/turf/simulated/floor{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/ship/scrap/maintenance/engine) -"hu" = (/obj/structure/cable{tag = "icon-4-9"; icon_state = "4-9"},/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) -"hv" = (/obj/machinery/power/apc{dir = 1; name = "Engine APC"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) -"hw" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) -"hx" = (/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) -"hy" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/ship/scrap/maintenance/engine) -"hz" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/sign{tag = "icon-radiation"; icon_state = "radiation"},/turf/simulated/wall,/area/ship/scrap/maintenance/engine) -"hA" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/maintenance/engine) -"hB" = (/turf/space,/area/ship/scrap/maintenance/engine) -"hC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area/ship/scrap/maintenance/engine) -"hD" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area/ship/scrap/maintenance/engine) +"ht" = (/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hu" = (/obj/structure/cable{tag = "icon-4-9"; icon_state = "4-9"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hv" = (/obj/machinery/power/apc{dir = 1; name = "Engine APC"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hw" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hx" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hy" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hz" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/tank/phoron{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hA" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hB" = (/obj/machinery/atmospherics/tvalve{tag = "icon-tvalve0 (WEST)"; icon_state = "tvalve0"; dir = 8},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hC" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hD" = (/obj/machinery/atmospherics/pipe/tank/oxygen{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hE" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater{tag = "icon-freezer_0 (EAST)"; icon_state = "freezer_0"; dir = 4},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hF" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hG" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hH" = (/obj/machinery/atmospherics/valve/open{tag = "icon-valve1 (EAST)"; icon_state = "valve1"; dir = 4},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hI" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"hJ" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) +"hK" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) +"hL" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers,/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) +"hM" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-warnplate"; icon_state = "warnplate"; dir = 2},/area/ship/scrap/maintenance/engine) +"hN" = (/obj/machinery/atmospherics/unary/engine{tag = "icon-nozzle (NORTH)"; icon_state = "nozzle"; dir = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -441,14 +451,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafAgsgsgsgsgtgugvgvgwgvgxgvgygzgzgzgz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagsgAgBgCgtgDgEgFgGgHgIgJgygKgLgMgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagNgOgPgQgRgSgTgUgVgWgWgXgYgZhahbhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagshdhdhehfhghhhihjhkhlhmgzhnhohpgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagsgsgNhqdwhreedwdwdwdwdweFgzhcgzgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahseFhthuhvhwhxhxhyeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFhzevevevevevhAeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahBdxeGeGeGeGeGdwhBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahBhChDhDhDhDhDhChBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahBhChBhBhBhBhBhChBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagsgsgNhqdwhrdwdwdwdwdwdweFgzhcgzgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahseFhthuhvhwhxhyhzeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFhthththAhBhChDeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFeFhEhFhGhHhIeFeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFhJhKhLhKhMeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxhNhNhNhNhNdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/overmap/example_sector1.dmm b/maps/overmap/example_sector1.dmm index 9ee477041e..55e125eaf4 100644 --- a/maps/overmap/example_sector1.dmm +++ b/maps/overmap/example_sector1.dmm @@ -260,22 +260,21 @@ "eZ" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/tcommsat/entrance) "fa" = (/obj/item/weapon/cell,/turf/simulated/floor,/area/tcommsat/entrance) "fb" = (/obj/structure/closet/malf/suits,/turf/simulated/floor,/area/tcommsat/entrance) -"fc" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/turf/space,/area/shuttle/escape_pod1/centcom) -"fd" = (/obj/machinery/door/airlock/external{frequency = 1381; icon_state = "door_locked"; id_tag = "telecoms_outer"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/tcommsat/entrance) -"fe" = (/obj/machinery/camera/xray{c_tag = "External Airlock"; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1381; id_tag = "telecoms_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "telecoms_pump"; tag_exterior_door = "telecoms_outer"; frequency = 1381; id_tag = "telecoms_airlock"; tag_interior_door = "telecoms_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "telecoms_sensor"},/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "telecoms_sensor"; pixel_x = 12; pixel_y = -25},/turf/simulated/floor/plating,/area/tcommsat/entrance) -"ff" = (/obj/machinery/door/airlock/external{frequency = 1381; icon_state = "door_locked"; id_tag = "telecoms_inner"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance) -"fg" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) -"fh" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor,/area/tcommsat/entrance) -"fi" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/entrance) -"fj" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) -"fk" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/tcommsat/entrance) -"fl" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/machinery/camera{c_tag = "Entrance South"; dir = 1; network = list("Tcomsat")},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) -"fm" = (/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/tcommsat/entrance) -"fn" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/tcommsat/entrance) -"fo" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/tcommsat/entrance) -"fp" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/tcommsat/entrance) -"fq" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/tcommsat/entrance) -"fr" = (/obj/effect/mapinfo/sector{icon = 'icons/obj/stock_parts.dmi'; icon_state = "treatment_disk"; landing_area = /area/shuttle/escape_pod1/centcom; mapx = 7; mapy = 3; name = "Communications Relay"},/turf/space,/area) +"fc" = (/obj/machinery/door/airlock/external{frequency = 1381; icon_state = "door_locked"; id_tag = "telecoms_outer"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "10;13"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "interior access button"; pixel_x = -7; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"fd" = (/obj/machinery/camera/xray{c_tag = "External Airlock"; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1381; id_tag = "telecoms_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "telecoms_pump"; tag_exterior_door = "telecoms_outer"; frequency = 1381; id_tag = "telecoms_airlock"; tag_interior_door = "telecoms_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "telecoms_sensor"},/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "telecoms_sensor"; pixel_x = 12; pixel_y = -25},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"fe" = (/obj/machinery/door/airlock/external{frequency = 1381; icon_state = "door_locked"; id_tag = "telecoms_inner"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"ff" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) +"fg" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor,/area/tcommsat/entrance) +"fh" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/entrance) +"fi" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) +"fj" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/tcommsat/entrance) +"fk" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/machinery/camera{c_tag = "Entrance South"; dir = 1; network = list("Tcomsat")},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcommsat/entrance) +"fl" = (/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/tcommsat/entrance) +"fm" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/tcommsat/entrance) +"fn" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"fo" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"fp" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/tcommsat/entrance) +"fq" = (/obj/effect/mapinfo/sector{icon = 'icons/obj/stock_parts.dmi'; icon_state = "treatment_disk"; landing_area = /area/shuttle/escape_pod1/centcom; mapx = 7; mapy = 3; name = "Communications Relay"},/turf/space,/area) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -315,10 +314,10 @@ aaaaaaaaaaaaaaaaababadadadadadadadadadadadeoeNeOePeoadadadadadadadadadadadababaa aaaaaaaaaaaaaaaaaaabababababababababababeoeoeQeReSeoeoabababababababababababaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTababeoeoeUeVeWeHeXeoeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTeoeoeYeZfaezezezezfbeoabaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTfcfdfefffgezezfhezezfieoabaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTeMeoeofjfkezezezezfbeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTababeoeoflfmfmfmfneoeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTabababeoeofofpfqeoeoabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTfcfdfeffezezfgezezfheoabaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTeMeoeofifjezezezezfbeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTababeoeofkflflflfmeoeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTabababeoeofnfofpeoeoabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababeoeoeoeoeoababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaabababacabababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -326,6 +325,6 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -fraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +fqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/overmap/example_sector2.dmm b/maps/overmap/example_sector2.dmm index 71b403ff06..48fa14cd97 100644 --- a/maps/overmap/example_sector2.dmm +++ b/maps/overmap/example_sector2.dmm @@ -1,171 +1,180 @@ "aa" = (/turf/space,/area) -"ab" = (/obj/effect/mapinfo/sector{icon = 'icons/obj/mining.dmi'; icon_state = "ore2"; landing_area = /area/shuttle/escape_pod2/centcom; name = "Abandoned Outpost"},/turf/space,/area) -"ac" = (/turf/space,/area/shuttle/escape_pod2/centcom) -"ad" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"ae" = (/turf/simulated/floor,/area/mine/abandoned) -"af" = (/obj/structure/lattice,/turf/space,/area) -"ag" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/mine/abandoned) -"ah" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor,/area/mine/abandoned) -"ai" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) -"aj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"ak" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"al" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"am" = (/turf/simulated/mineral,/area/mine/unexplored) -"an" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"ao" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"ap" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) -"aq" = (/turf/simulated/mineral/random,/area/mine/unexplored) -"ar" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"as" = (/turf/simulated/wall,/area/mine/abandoned) -"at" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/mine/abandoned) -"au" = (/obj/item/stack/rods,/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"av" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"aw" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area) -"ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) -"ay" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"az" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"aA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aD" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"aE" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"aF" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/space,/area) -"aG" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aH" = (/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aJ" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"aK" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"aL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"aM" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor,/area/mine/abandoned) -"aN" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/mine/abandoned) -"aO" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating,/area/mine/abandoned) -"aP" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aQ" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/suit/space/syndicate,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"aR" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"aS" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"aT" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"aU" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"aV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"aW" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"aX" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/plating,/area/mine/abandoned) -"aY" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area) -"aZ" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"ba" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"bb" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"bc" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating,/area/mine/abandoned) -"bd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"be" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bf" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/space,/area/mine/abandoned) -"bg" = (/obj/structure/lattice,/turf/space,/area/mine/abandoned) -"bh" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"bi" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/mine/abandoned) -"bj" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"bk" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"bl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bn" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned) -"bo" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bp" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"bq" = (/turf/simulated/floor/airless,/area/mine/abandoned) -"br" = (/obj/effect/alien/weeds,/turf/simulated/floor,/area/mine/abandoned) -"bs" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"bt" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned) -"bu" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned) -"bv" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/abandoned) -"bw" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"bx" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"by" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bz" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"bA" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"bB" = (/obj/structure/table,/turf/simulated/floor/airless,/area/mine/abandoned) -"bC" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"bD" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"bE" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/mine/abandoned) -"bF" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"bG" = (/obj/machinery/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned) -"bH" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"bI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"bJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned) -"bK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) -"bL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"bM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"bN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) -"bO" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor,/area/mine/abandoned) -"bP" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"bQ" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"bR" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) -"bS" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor,/area/mine/abandoned) -"bT" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"bU" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned) -"bV" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"bW" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned) -"bX" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"bY" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned) -"bZ" = (/obj/effect/alien/resin,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"ca" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) -"cb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) -"cc" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) -"cd" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) -"ce" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"cf" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"cg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) -"ch" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned) -"ci" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned) -"cj" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"ck" = (/obj/structure/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"cl" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) -"cm" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"cn" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"co" = (/obj/structure/girder,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"cp" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) -"cq" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/mine/abandoned) -"cr" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) -"cs" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) -"ct" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"cu" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) -"cv" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) -"cw" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored) -"cx" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"ab" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"},/area/shuttle/overmap_examples/outpost) +"ac" = (/obj/structure/shuttle/window{tag = "icon-3"; icon_state = "3"},/turf/simulated/shuttle/floor,/area/shuttle/overmap_examples/outpost) +"ad" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"},/area/shuttle/overmap_examples/outpost) +"ae" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/shuttle/overmap_examples/outpost) +"af" = (/obj/machinery/computer/shuttle_control/explore{landing_type = /area/shuttle/overmap_examples/outpost},/turf/simulated/shuttle/floor,/area/shuttle/overmap_examples/outpost) +"ag" = (/obj/effect/mapinfo/sector{icon = 'icons/obj/mining.dmi'; icon_state = "ore2"; landing_area = /area/shuttle/escape_pod2/centcom; name = "Abandoned Outpost"},/turf/space,/area) +"ah" = (/turf/simulated/shuttle/floor,/area/shuttle/overmap_examples/outpost) +"ai" = (/turf/space,/area/shuttle/escape_pod2/centcom) +"aj" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"},/area/shuttle/overmap_examples/outpost) +"ak" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/overmap_examples/outpost) +"al" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"},/area/shuttle/overmap_examples/outpost) +"am" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) +"an" = (/turf/simulated/floor,/area/mine/abandoned) +"ao" = (/obj/structure/lattice,/turf/space,/area) +"ap" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/mine/abandoned) +"aq" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor,/area/mine/abandoned) +"ar" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) +"as" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) +"at" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"au" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"av" = (/turf/simulated/mineral,/area/mine/unexplored) +"aw" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"ax" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"ay" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) +"az" = (/turf/simulated/mineral/random,/area/mine/unexplored) +"aA" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"aB" = (/turf/simulated/wall,/area/mine/abandoned) +"aC" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/mine/abandoned) +"aD" = (/obj/item/stack/rods,/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"aE" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aF" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area) +"aG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned) +"aH" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aI" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"aJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aM" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aN" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aO" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/space,/area) +"aP" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aQ" = (/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aS" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"aT" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"aU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) +"aV" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor,/area/mine/abandoned) +"aW" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/mine/abandoned) +"aX" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating,/area/mine/abandoned) +"aY" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"aZ" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/suit/space/syndicate,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"ba" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"bb" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"bc" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"bd" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"be" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) +"bf" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"bg" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/plating,/area/mine/abandoned) +"bh" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area) +"bi" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bj" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"bk" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"bl" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating,/area/mine/abandoned) +"bm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bn" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bo" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/space,/area/mine/abandoned) +"bp" = (/obj/structure/lattice,/turf/space,/area/mine/abandoned) +"bq" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"br" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/mine/abandoned) +"bs" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"bt" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"bu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bw" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned) +"bx" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"by" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"bz" = (/turf/simulated/floor/airless,/area/mine/abandoned) +"bA" = (/obj/effect/alien/weeds,/turf/simulated/floor,/area/mine/abandoned) +"bB" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"bC" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned) +"bD" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned) +"bE" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/abandoned) +"bF" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"bG" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"bH" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating/airless,/area/mine/abandoned) +"bI" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"bJ" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"bK" = (/obj/structure/table,/turf/simulated/floor/airless,/area/mine/abandoned) +"bL" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"bM" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"bN" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/mine/abandoned) +"bO" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"bP" = (/obj/machinery/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned) +"bQ" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"bR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) +"bS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned) +"bT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) +"bU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) +"bV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) +"bW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) +"bX" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor,/area/mine/abandoned) +"bY" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"bZ" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"ca" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) +"cb" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor,/area/mine/abandoned) +"cc" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"cd" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned) +"ce" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"cf" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned) +"cg" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"ch" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned) +"ci" = (/obj/effect/alien/resin,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"cj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned) +"ck" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) +"cl" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned) +"cm" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) +"cn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"co" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"cp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned) +"cq" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned) +"cr" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned) +"cs" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"ct" = (/obj/structure/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"cu" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored) +"cv" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"cw" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"cx" = (/obj/structure/girder,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"cy" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) +"cz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/mine/abandoned) +"cA" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) +"cB" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) +"cC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"cD" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) +"cE" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) +"cF" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored) +"cG" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored) (1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaadaeadafaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaagahaiajafaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaakaladafaaaaamamamaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaanaoapafafaqaqamamaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaralasaqaqaqaqaqaqaqaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafatauavasaqaqaqaqaqaqaqaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafawaxayazasaqaqaqaqaqaqaqaqaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaAaBaCasaDaEasasasasaqaqaqaqaqaqaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaFaGaHaIaJaKaLaoaMasaNaOasaqaqaqaqaqaqaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaafaPaQaGaRaSaTaUaVaMaWaOaXaNasaqaqaqaqaqaqaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaYaPaZaPaHaHaDbaaSasazbbasaObcasaqaqaqaqaqaqaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaafafbdbeaHbfbgaHavbhaTbibjbkasasasasasasaqaqaqaqaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaafafblbmbnaHbgboaRbpaSbqasbrbsasbtaMbubvasaqaqaqaqaaaaaaaaaa -aaaaaaaaaaaaaaafafafaqaqasaKbwbxbybnbzbAaTbBaLaobCasbtazaMbvasaqaqaqaaaaaaaaaaaa -aaaaaaaaaaaaafasasasasasasaJaSbDbwaSbhbEbBbBaVaMbrasbtavbFbvasaqaqaaaaaaaaaaaaaa -aaaaaaaaaaaaafasbGaoaTbHasbIbJbKasbiasbLbMbNasaobOaebPavayaeasaqaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaqasbGavaoaRbibObwbQbwbRaoaobSaMaoavavasaebTavaoasaqaqaaaaaaaaaaaaaa -aaaaaaaaaaaqaqasbGbUavavbiavbFaDavbVbRbFbCbWavbXazasbwaebOaoasaqaqaqaaaaaaaaaaaa -aaaaaaaaaqaqaqasbGbYaRaJasbZascacbasaTascacbasaSbOasbSccaebrasaqaqaqaaaaaaaaaaaa -aaaaaaaqaqaqaqasasasasasasbZascdaMaTbrazaSbzaSbkaRascacecfcgasaqaqaqaqaaaaaaaaaa -aaaaaaaqaqaqaqaqaqaqaqaqasbZasaMbrchbhalaRaMasaSazascicjcjckasclaqaqaqaaaaaaaaaa -aaaaaaaqaqaqaqaqaqaqaqaqasbZasbraobkaMaSazbkasbZasasbtaecjcmcnclclaqaqaaaaaaaaaa -aaaaaqaqaqaqaqaqaqaqaqaqasbZasasasasasasasasasbZasbtaebuaeckcoclclaqaqaaaaaaaaaa -aaaaaqaqaqaqaqaqaqaqaqaqasbZbZbZbZbZbZbZbZbZbZbZasbtbubububvasclclclaqaaaaaaaaaa -aaaaaqaqaqaqaqaqaqaqaqaqasasasasasasasasasasasasasascgcpcqasasclclclclaaaaaaaaaa -aaaaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqclclclascjcjbuasclclclclaaaaaaaaaaaa -aaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqclclclascrcscrasclclclclclaaaaaaaaaa -aaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqclclasctcpcgasclclclclaaaaaaaaaaaa -aaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqclclclcucvcwclclclclaqaaaaaaaaaaaa -aaaaaaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqclclclclclcxclclclclaqaaaaaaaaaaaa -aaaaaaaaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqclclclclclclclcxclclaqaqaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaqaqaqaqaqaqaqaqaaaaaaaaaaaaclclclclcxclclclclaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaqaqaqaaaaaaaaaaaaaaaaclclclclclclaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaqaqaaaaaaaaaaaaaaaaaaaaclclclaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeafaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeahaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaaaaajakalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaaaaamanamaoaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaaaaapaqarasaoaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaaaaaaatauamaoaaaaavavavaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaaaaaaawaxayaoaoazazavavaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaaaaaaaAauaBazazazazazazazaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaCaDaEaBazazazazazazazaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaFaGaHaIaBazazazazazazazazaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaJaKaLaBaMaNaBaBaBaBazazazazazazaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaOaPaQaRaSaTaUaxaVaBaWaXaBazazazazazazaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaYaZaPbabbbcbdbeaVbfaXbgaWaBazazazazazazaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabhaYbiaYaQaQaMbjbbaBaIbkaBaXblaBazazazazazazaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaoaobmbnaQbobpaQaEbqbcbrbsbtaBaBaBaBaBaBazazazazaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaoaobubvbwaQbpbxbabybbbzaBbAbBaBbCaVbDbEaBazazazazaaaaaaaaaa +aaaaaaaaaaaaaaaoaoaoazazaBaTbFbGbHbwbIbJbcbKaUaxbLaBbCaIaVbEaBazazazaaaaaaaaaaaa +aaaaaaaaaaaaaoaBaBaBaBaBaBaSbbbMbFbbbqbNbKbKbeaVbAaBbCaEbObEaBazazaaaaaaaaaaaaaa +aaaaaaaaaaaaaoaBbPaxbcbQaBbRbSbTaBbraBbUbVbWaBaxbXanbYaEaHanaBazaaaaaaaaaaaaaaaa +aaaaaaaaaaaaazaBbPaEaxbabrbXbFbZbFcaaxaxcbaVaxaEaEaBanccaEaxaBazazaaaaaaaaaaaaaa +aaaaaaaaaaazazaBbPcdaEaEbraEbOaMaEcecabObLcfaEcgaIaBbFanbXaxaBazazazaaaaaaaaaaaa +aaaaaaaaazazazaBbPchbaaSaBciaBcjckaBbcaBcjckaBbbbXaBcbclanbAaBazazazaaaaaaaaaaaa +aaaaaaazazazazaBaBaBaBaBaBciaBcmaVbcbAaIbbbIbbbtbaaBcjcncocpaBazazazazaaaaaaaaaa +aaaaaaazazazazazazazazazaBciaBaVbAcqbqaubaaVaBbbaIaBcrcscsctaBcuazazazaaaaaaaaaa +aaaaaaazazazazazazazazazaBciaBbAaxbtaVbbaIbtaBciaBaBbCancscvcwcucuazazaaaaaaaaaa +aaaaazazazazazazazazazazaBciaBaBaBaBaBaBaBaBaBciaBbCanbDanctcxcucuazazaaaaaaaaaa +aaaaazazazazazazazazazazaBciciciciciciciciciciciaBbCbDbDbDbEaBcucucuazaaaaaaaaaa +aaaaazazazazazazazazazazaBaBaBaBaBaBaBaBaBaBaBaBaBaBcpcyczaBaBcucucucuaaaaaaaaaa +aaaaaaazazazazazazazazazazazazazazazazazazazcucucuaBcscsbDaBcucucucuaaaaaaaaaaaa +aaaaazazazazazazazazazazazazazazazazazazazazcucucuaBcAcBcAaBcucucucucuaaaaaaaaaa +aaaaazazazazazazazazazazazazazazazazazazazazazcucuaBcCcycpaBcucucucuaaaaaaaaaaaa +aaaaazazazazazazazazazazazazazazazazazazazazazcucucucDcEcFcucucucuazaaaaaaaaaaaa +aaaaaaaaazazazazazazazazazazazazazazazazazazazcucucucucucGcucucucuazaaaaaaaaaaaa +aaaaaaaaaaazazazazazazazazazazazazazazazazazcucucucucucucucGcucuazazaaaaaaaaaaaa +aaaaaaaaaaaaaaaaazazazazazazazazaaaaaaaaaaaacucucucucGcucucucuaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaazazazaaaaaaaaaaaaaaaacucucucucucuaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaazazaaaaaaaaaaaaaaaaaaaacucucuaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} diff --git a/maps/overmap/examples.dm b/maps/overmap/examples.dm new file mode 100644 index 0000000000..f736bf319c --- /dev/null +++ b/maps/overmap/examples.dm @@ -0,0 +1,3 @@ +/area/shuttle/overmap_examples/outpost + name = "abandoned outpost shuttle" + icon_state = "shuttle2" \ No newline at end of file diff --git a/nano/templates/engines_control.tmpl b/nano/templates/engines_control.tmpl new file mode 100644 index 0000000000..505150964a --- /dev/null +++ b/nano/templates/engines_control.tmpl @@ -0,0 +1,84 @@ +
+ {{:~link('Overall status', 'note', {'state' :'status'}, null, state == 'status' ? 'selected' : null)}} + {{:~link('Details', 'note', {'state' : 'engines'}, null, state == 'engines' ? 'selected' : null)}} +
+ +{{if state == "engines"}} + {{if engines_info}} + {{for engines_info}} +
+
+ Engine #{{:#index + 1}}: +
+
+ {{:~link(eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : eng_reference }, null, eng_on ? 'selected' : null)}} +
+
+
+
+
+ Type: +
+
+ {{:eng_type}} +
+
+
+
+ Status: +
+
+ {{:eng_on ? 'Online' : 'Offline'}}
+ {{:eng_status}} +
+
+
+
+ Current thrust: +
+
+ {{:eng_thrust}} +
+
+
+
+ Thrust limit: +
+
+ {{:~link('', 'circle-plus', { 'limit' : 0.1, 'engine' : eng_reference }, null, null)}} + {{:~link(eng_thrust_limiter+'%', null, { 'set_limit' : 1, 'engine' : eng_reference }, null, null)}} + {{:~link('', 'circle-minus', { 'limit' : -0.1, 'engine' : eng_reference }, null, null)}} +
+
+
+ {{/for}} + {{/if}} +{{/if}} +{{if state == "status"}} +{{if engines_info}} + {{for engines_info}} +
+
+
+ Engine #{{:#index + 1}}: +
+
+ {{:~link(eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : eng_reference }, null, eng_on ? 'selected' : null)}} +
+
+
+
+ Thrust: +
+ Thrust limit: +
+
+ {{:eng_thrust}} +
+ {{:eng_thrust_limiter}}% +
+
+
+ {{/for}} + {{/if}} +{{/if}} \ No newline at end of file diff --git a/nano/templates/helm.tmpl b/nano/templates/helm.tmpl new file mode 100644 index 0000000000..1457d7a336 --- /dev/null +++ b/nano/templates/helm.tmpl @@ -0,0 +1,119 @@ + + + + + +
+

Sector information

+
+ {{:sector}} +
+ Coordinates: {{:s_x}} : {{:s_y}} +
+ Additional information: {{:s_x}} : {{:s_y}} + {{:sector_info}} +
+
+ +
+

Flight data

+
+
+
+ Speed: +
+
+ {{:speed}} +
+
+
+
+ Acceleration: +
+
+ {{:accel}} +
+
+
+
+ Heading: +
+
+ {{:heading}} +
+
+
+
+ + +

Manual control

+
+
+
+
+ {{:~link('', 'triangle-1-nw', { 'move' : 9 }, null, null)}} + {{:~link('', 'triangle-1-n', { 'move' : 1 }, null, null)}} + {{:~link('', 'triangle-1-ne', { 'move' : 5 }, null, null)}} +
+
+ {{:~link('', 'triangle-1-w', { 'move' : 8 }, null, null)}} + {{:~link('', 'circle-close', { 'brake' : 1 }, null, null)}} + {{:~link('', 'triangle-1-e', { 'move' : 4 }, null, null)}} +
+
+ {{:~link('', 'triangle-1-sw', { 'move' : 10 }, null, null)}} + {{:~link('', 'triangle-1-s', { 'move' : 2 }, null, null)}} + {{:~link('', 'triangle-1-se', { 'move' : 6 }, null, null)}} +
+
+ +
+
+ Direct control + {{:~link(manual_control ? 'Engaged' : 'Disengaged', 'shuffle', { 'manual' : 1 }, manual_control ? 'selected' : null, null)}} +
+
+
+
+ +
+
+

Autopilot

+
+
+ {{:~link(autopilot? 'Engaged' : 'Disengaged', 'gear', { 'apilot' : 1 }, dest ? null : 'disabled' , autopilot ? 'selected' : null)}} +
+
+
+
+ Target coordinates +
+
+ {{if dest}} + {{:~link(d_x, null, { 'setx' : 1 }, null, null)}} {{:~link(d_y, null, { 'sety' : 1 }, null, null)}} + {{else}} + {{:~link('None', null, { 'sety' : 1, 'setx' : 1 }, null, null)}} + {{/if}} +
+
+ +

Navigation data

+
+ {{:~link('Save current position', 'disk', { 'add' : 'current' }, null)}} + {{:~link('Add new entry', 'document', { 'add' : 'new' }, null)}} +
+ +
+ {{if locations}} + {{for locations}} +
+ {{:name}}: + {{:x}} : {{:y}} +
+
+ {{:~link('Plot course', 'arrowreturnthick-1-e', { 'x' : x, 'y' : y }, null, null)}} + {{:~link('Remove entry', 'close', { 'remove' : reference }, null, null)}} +
+ {{/for}} + {{/if}} +
diff --git a/nano/templates/shuttle_control_console_exploration.tmpl b/nano/templates/shuttle_control_console_exploration.tmpl new file mode 100644 index 0000000000..443b3190a9 --- /dev/null +++ b/nano/templates/shuttle_control_console_exploration.tmpl @@ -0,0 +1,74 @@ +

Shuttle Status

+
+
+ {{:shuttle_status}} +
+
+
+
+
+ Drive: +
+
+ {{if shuttle_state == "idle"}} + IDLE + {{else shuttle_state == "warmup"}} + SPINNING UP + {{else shuttle_state == "in_transit"}} + ENGAGED + {{else}} + ERROR + {{/if}} +
+
+
+{{if has_docking}} +
+
+
+ Docking Status: +
+
+ {{if docking_status == "docked"}} + DOCKED + {{else docking_status == "docking"}} + {{if !docking_override}} + DOCKING + {{else}} + DOCKING-MANUAL + {{/if}} + {{else docking_status == "undocking"}} + {{if !docking_override}} + UNDOCKING + {{else}} + UNDOCKING-MANUAL + {{/if}} + {{else docking_status == "undocked"}} + UNDOCKED + {{else}} + ERROR + {{/if}} + +
+
+
+{{/if}} +
+
+ Current Destination: +
+ {{:destination_name}} +
+ {{:~link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, can_pick? null : 'disabled' , null)}} +
+
+

Shuttle Control

+
+
+
+ {{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}} + {{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}} + {{:~link('Force Launch', 'alert', {'force' : '1'}, can_force? null : 'disabled' , can_force? 'redBackground' : null)}} +
+
+
\ No newline at end of file