diff --git a/baystation12.dme b/baystation12.dme index cc76085482a..7cee116ae4d 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -746,6 +746,7 @@ #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\preferences.dm" +#include "code\modules\client\preferences_gear.dm" #include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_spawnpoints.dm" #include "code\modules\client\preferences_toggles.dm" @@ -952,6 +953,7 @@ #include "code\modules\mob\living\carbon\brain\death.dm" #include "code\modules\mob\living\carbon\brain\emote.dm" #include "code\modules\mob\living\carbon\brain\life.dm" +#include "code\modules\mob\living\carbon\brain\login.dm" #include "code\modules\mob\living\carbon\brain\MMI.dm" #include "code\modules\mob\living\carbon\brain\posibrain.dm" #include "code\modules\mob\living\carbon\brain\say.dm" diff --git a/code/WorkInProgress/Chinsky/overmap/README.dm b/code/WorkInProgress/Chinsky/overmap/README.dm new file mode 100644 index 00000000000..d11ea1fdee2 --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/README.dm @@ -0,0 +1,110 @@ +/* +The overmap system allows adding new maps to the big 'galaxy' map. +Idea is that new sectors can be added by just ticking in new maps and recompiling. +Not real hot-plugging, but still pretty modular. +It uses the fact that all ticked in .dme maps are melded together into one as different zlevels. +Metaobjects are used to make it not affected by map order in .dme and carry some additional info. + +************************************************************* +Metaobject +************************************************************* +/obj/effect/mapinfo, sectors.dm +Used to build overmap in beginning, has basic information needed to create overmap objects and make shuttles work. +Its name and icon (if non-standard) vars will be applied to resulting overmap object. +'mapy' and 'mapx' vars are optional, sector will be assigned random overmap coordinates if they are not set. +Has two important vars: + obj_type - type of overmap object it spawns. Could be overriden for custom overmap objects. + landing_area - type of area used as inbound shuttle landing, null if no shuttle landing area. + +Object could be placed anywhere on zlevel. Should only be placed on zlevel that should appear on overmap as a separate entitety. +Right after creation it sends itself to nullspace and creates an overmap object, corresponding to this zlevel. + +************************************************************* +Overmap object +************************************************************* +/obj/effect/map, sectors.dm +Represents a zlevel on the overmap. Spawned by metaobjects at the startup. + var/area/shuttle/shuttle_landing - keeps a reference to the area of where inbound shuttles should land + +-CanPass should be overriden for access restrictions +-Crossed/Uncrossed can be overriden for applying custom effects. +Remember to call ..() in children, it updates ship's current sector. + +subtype /ship of this object represents spacefaring vessels. +It has 'current_sector' var that keeps refernce to, well, sector ship currently in. + +************************************************************* +Helm console +************************************************************* +/obj/machinery/computer/helm, helm.dm +On creation console seeks a ship overmap object corresponding to this zlevel and links it. +Clicking with empty hand on it starts steering, Cancel-Camera-View stops it. +Helm console relays movement of mob to the linked overmap object. +Helm console currently has no interface. All travel happens instanceously too. +Sector shuttles are not supported currently, only ship shuttles. + +************************************************************* +Exploration shuttle terminal +************************************************************* +A generic shuttle controller. +Has a var landing_type defining type of area shuttle should be landing at. +On initalizing, checks for a shuttle corresponding to this zlevel, and creates one if it's not there. +Changes desitnation area depending on current sector ship is in. +Currently updating is called in attack_hand(), until a better place is found. +Currently no modifications were made to interface to display availability of landing area in sector. + + +************************************************************* +Guide to how make new sector +************************************************************* +0.Map +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. + +2.Overmap object +If you need custom behaviour on entering/leaving this sector, or restricting access to it, you can define your custom map object. +Remember to put this new type into spawn_type var of metaobject. + +3.Shuttle console +Remember to place one on the actual shuttle too, or it won't be able to return from sector without ship-side recall. +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) + +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: +more mechanics to moving ship: + 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: + 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 00000000000..dfc0881ed53 --- /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/sectors.dm b/code/WorkInProgress/Chinsky/overmap/sectors.dm new file mode 100644 index 00000000000..9e1635a9602 --- /dev/null +++ b/code/WorkInProgress/Chinsky/overmap/sectors.dm @@ -0,0 +1,95 @@ + +//=================================================================================== +//Hook for building overmap +//=================================================================================== +var/global/list/map_sectors = list() + +/hook/startup/proc/build_map() + accessable_z_levels = list() //no space travel with this system, at least not like this + testing("Building overmap...") + var/obj/effect/mapinfo/data + for(var/level in 1 to world.maxz) + data = locate("sector[level]") + if (data) + testing("Located sector \"[data.name]\" at [data.mapx],[data.mapy] corresponding to zlevel [level]") + map_sectors["[level]"] = new data.obj_type(data) + return 1 + +//=================================================================================== +//Metaobject for storing information about sector this zlevel is representing. +//Should be placed only once on every zlevel. +//=================================================================================== +/obj/effect/mapinfo/ + name = "map info metaobject" + icon = 'icons/mob/screen1.dmi' + icon_state = "x2" + invisibility = 101 + var/obj_type //type of overmap object it spawns + var/landing_area //type of area used as inbound shuttle landing, null if no shuttle landing area + var/zlevel + var/mapx //coordinates on the + var/mapy //overmap zlevel + var/known = 1 + +/obj/effect/mapinfo/New() + tag = "sector[z]" + zlevel = z + loc = null + +/obj/effect/mapinfo/sector + name = "generic sector" + obj_type = /obj/effect/map/sector + +/obj/effect/mapinfo/ship + name = "generic ship" + obj_type = /obj/effect/map/ship + + +//=================================================================================== +//Overmap object representing zlevel +//=================================================================================== + +/obj/effect/map + name = "map object" + icon = 'icons/obj/items.dmi' + 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(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) + shuttle_landing = locate(data.landing_area) + +/obj/effect/map/CanPass(atom/movable/A) + testing("[A] attempts to enter sector\"[name]\"") + return 1 + +/obj/effect/map/Crossed(atom/movable/A) + testing("[A] has entered sector\"[name]\"") + if (istype(A,/obj/effect/map/ship)) + var/obj/effect/map/ship/S = A + S.current_sector = src + +/obj/effect/map/Uncrossed(atom/movable/A) + testing("[A] has left sector\"[name]\"") + if (istype(A,/obj/effect/map/ship)) + var/obj/effect/map/ship/S = A + S.current_sector = null + +/obj/effect/map/sector + name = "generic sector" + desc = "Sector with some stuff in it." + anchored = 1 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 00000000000..07d6a4579be --- /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 00000000000..f81e569abcf --- /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 00000000000..c63ad2d763a --- /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 00000000000..80690aa84dc --- /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 00000000000..b26e7216389 --- /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 00000000000..b080c41b071 --- /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/code/WorkInProgress/computer3/laptop.dm b/code/WorkInProgress/computer3/laptop.dm index bff5a116f38..b88f782c2cd 100644 --- a/code/WorkInProgress/computer3/laptop.dm +++ b/code/WorkInProgress/computer3/laptop.dm @@ -30,18 +30,18 @@ var/obj/machinery/computer3/laptop/stored_computer = null verb/open_computer() - set name = "open laptop" + set name = "Open Laptop" set category = "Object" set src in view(1) - + if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living)) usr << "\red You can't do that." return - + if(!Adjacent(usr)) usr << "You can't reach it." return - + if(!istype(loc,/turf)) usr << "[src] is too bulky! You'll have to set it down." return @@ -69,9 +69,42 @@ if(Adjacent(usr)) open_computer() +//Quickfix until Snapshot works out how he wants to redo power. ~Z +/obj/item/device/laptop/verb/eject_id() + set category = "Object" + set name = "Eject ID Card" + set src in oview(1) + + if(stored_computer) + stored_computer.eject_id() + +/obj/machinery/computer3/laptop/verb/eject_id() + set category = "Object" + set name = "Eject ID Card" + set src in oview(1) + + var/obj/item/part/computer/cardslot/C = locate() in src.contents + + if(!C) + usr << "There is no card port on the laptop." + return + + var/obj/item/weapon/card/id/card + if(C.reader) + card = C.reader + else if(C.writer) + card = C.writer + else + usr << "There is nothing to remove from the laptop card port." + return + + usr << "You remove [card] from the laptop." + C.remove(card) + + /obj/machinery/computer3/laptop name = "Laptop Computer" - desc = "A clamshell portable computer. It is open." + desc = "A clamshell portable computer. It is open." icon_state = "laptop" density = 0 @@ -90,15 +123,15 @@ set name = "Close Laptop" set category = "Object" set src in view(1) - + if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living)) usr << "\red You can't do that." return - + if(!Adjacent(usr)) usr << "You can't reach it." return - + if(istype(loc,/obj/item/device/laptop)) testing("Close closed computer") return diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 0abb637cce9..3f74cbd0eae 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -141,7 +141,7 @@ var/const/tk_maxrange = 15 else apply_focus_overlay() - focus.throw_at(target, 10, 1) + focus.throw_at(target, 10, 1, user) last_throw = world.time return diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 171bef7c69a..0b314a25312 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -81,13 +81,6 @@ datum/controller/game_controller/proc/setup() for(var/i=0, iThe nanobots in the loyalty implant remove all thoughts about being in a cult. Have a productive day!" memory = "" if(src in ticker.mode.traitors) @@ -543,7 +543,7 @@ datum/mind log_admin("[key_name_admin(usr)] has de-traitor'ed [current].") else if (href_list["revolution"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["revolution"]) if("clear") @@ -648,7 +648,7 @@ datum/mind var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) if(!config.objectives_disabled) - cult.memoize_cult_objectives(src) + cult.memorize_cult_objectives(src) current << "\red You have been brainwashed! You are no longer a cultist!" memory = "" log_admin("[key_name_admin(usr)] has de-cult'ed [current].") @@ -663,7 +663,7 @@ datum/mind var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) if(!config.objectives_disabled) - cult.memoize_cult_objectives(src) + cult.memorize_cult_objectives(src) log_admin("[key_name_admin(usr)] has cult'ed [current].") if("tome") var/mob/living/carbon/human/H = current @@ -1126,7 +1126,7 @@ datum/mind current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) - cult.memoize_cult_objectives(src) + cult.memorize_cult_objectives(src) else var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." current << "Objective #1: [explanation]" diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 25a5242c076..c7e3df319d8 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -303,9 +303,10 @@ var/global/list/PDA_Manifest = list() throw_speed = 1 throw_range = 20 flags = FPRINT | TABLEPASS | CONDUCT + afterattack(atom/target as mob|obj|turf|area, mob/user as mob) user.drop_item() - src.throw_at(target, throw_range, throw_speed) + src.throw_at(target, throw_range, throw_speed, user) /obj/effect/stop var/victim = null diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 93cd982c108..dd662e40c09 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -450,16 +450,6 @@ usr.client.eye = target - -/obj/item/weapon/syntiflesh - name = "syntiflesh" - desc = "Meat that appears...strange..." - icon = 'icons/obj/food.dmi' - icon_state = "meat" - flags = FPRINT | TABLEPASS | CONDUCT - w_class = 2.0 - origin_tech = "biotech=2" - /* /obj/item/weapon/cigarpacket name = "Pete's Cuban Cigars" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 3253f272d0e..05a52137cc0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -22,27 +22,6 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom -/atom/proc/throw_impact(atom/hit_atom, var/speed) - if(istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - M.hitby(src,speed) - - else if(isobj(hit_atom)) - var/obj/O = hit_atom - if(!O.anchored) - step(O, src.dir) - O.hitby(src,speed) - - else if(isturf(hit_atom)) - var/turf/T = hit_atom - if(T.density) - spawn(2) - step(src, turn(src.dir, 180)) - if(istype(src,/mob/living)) - var/mob/living/M = src - M.take_organ_damage(20) - - /atom/proc/assume_air(datum/gas_mixture/giver) return null @@ -237,6 +216,8 @@ its easier to just keep the beam vertical. return /atom/proc/hitby(atom/movable/AM as mob|obj) + if (density) + AM.throwing = 0 return /atom/proc/add_hiddenprint(mob/living/M as mob) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 41da5ea7c87..de6b84d6557 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -7,6 +7,8 @@ var/l_move_time = 1 var/m_flag = 1 var/throwing = 0 + var/thrower + var/turf/throw_source = null var/throw_speed = 2 var/throw_range = 7 var/moved_recently = 0 @@ -25,7 +27,6 @@ /atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) if(src.throwing) src.throw_impact(A) - src.throwing = 0 spawn( 0 ) if ((A && yes)) @@ -44,6 +45,29 @@ return 1 return 0 +//called when src is thrown into hit_atom +/atom/movable/proc/throw_impact(atom/hit_atom, var/speed) + if(istype(hit_atom,/mob/living)) + var/mob/living/M = hit_atom + M.hitby(src,speed) + + else if(isobj(hit_atom)) + var/obj/O = hit_atom + if(!O.anchored) + step(O, src.dir) + O.hitby(src,speed) + + else if(isturf(hit_atom)) + src.throwing = 0 + var/turf/T = hit_atom + if(T.density) + spawn(2) + step(src, turn(src.dir, 180)) + if(istype(src,/mob/living)) + var/mob/living/M = src + M.turf_collision(T, speed) + +//decided whether a movable atom being thrown can pass through the turf it is in. /atom/movable/proc/hit_check(var/speed) if(src.throwing) for(var/atom/A in get_turf(src)) @@ -51,18 +75,17 @@ if(istype(A,/mob/living)) if(A:lying) continue src.throw_impact(A,speed) - if(src.throwing == 1) - src.throwing = 0 if(isobj(A)) if(A.density && !A.throwpass) // **TODO: Better behaviour for windows which are dense, but shouldn't always stop movement src.throw_impact(A,speed) - src.throwing = 0 -/atom/movable/proc/throw_at(atom/target, range, speed) +/atom/movable/proc/throw_at(atom/target, range, speed, thrower) if(!target || !src) return 0 //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target src.throwing = 1 + src.thrower = thrower + src.throw_source = get_turf(src) //store the origin turf if(usr) if(HULK in usr.mutations) @@ -149,8 +172,10 @@ a = get_area(src.loc) //done throwing, either because it hit something or it finished moving - src.throwing = 0 if(isobj(src)) src.throw_impact(get_turf(src),speed) + src.throwing = 0 + src.thrower = null + src.throw_source = null //Overlays diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index d2e2ddbdf76..285a2ac0e3a 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -99,7 +99,7 @@ update_cult_icons_added(cult_mind) cult_mind.current << "\blue You are a member of the cult!" if(!config.objectives_disabled) - memoize_cult_objectives(cult_mind) + memorize_cult_objectives(cult_mind) else cult_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." cult_mind.special_role = "Cultist" @@ -109,7 +109,7 @@ ..() -/datum/game_mode/cult/proc/memoize_cult_objectives(var/datum/mind/cult_mind) +/datum/game_mode/cult/proc/memorize_cult_objectives(var/datum/mind/cult_mind) for(var/obj_count = 1,obj_count <= objectives.len,obj_count++) var/explanation switch(objectives[obj_count]) @@ -186,7 +186,7 @@ if (!..(cult_mind)) return if (!config.objectives_disabled) - memoize_cult_objectives(cult_mind) + memorize_cult_objectives(cult_mind) /datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index a9217cd00f1..3da1dd8d25a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -108,16 +108,33 @@ var/list/sacrificed = list() "\red AAAAAAHHHH!.", \ "\red You hear an anguished scream.") if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, "cultist"))//putting jobban check here because is_convertable uses mind as argument - ticker.mode.add_cultist(M.mind) - M.mind.special_role = "Cultist" - M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root." - M << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." - return 1 + + // Mostly for the benefit of those who resist, but it makes sense for even those who join to have some.. effect. + M.take_overall_damage(0, 10) + + var/choice = alert(M,"Do you want to join the cult?","Submit to Nar'Sie","Resist","Submit") + if(choice == "Submit") + ticker.mode.add_cultist(M.mind) + M.mind.special_role = "Cultist" + M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root." + M << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." + return 1 + + else if(choice == "Resist") + + M.take_overall_damage(0, rand(5, 10)) // You dirty resister cannot handle the damage to your mind. Easily. + // Resist messages go! + var/BurnLoss = M.getFireLoss() + if (BurnLoss < 25) M << "Your blood boils as you force yourself to resist the corruption invading every corner of your mind." + else if (BurnLoss < 45) M << "Your blood boils and your body burns as the corruption further forces itself into your body and mind." + else if (BurnLoss < 75) M << "You begin to hallucinate images of a dark and incomprehensible being and your entire body feels like its engulfed in flame as your mental defenses crumble." + else if (BurnLoss < 100) M << "Your mind turns to ash as the burning flames engulf your very soul and images of Nar'Sie begin to bombard the last remnants of mental resistance." + else M << "Your entire broken soul and being is engulfed in corruption and flames as your mind shatters away into nothing." + return 0 else M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root." M << "And you were able to force it out of your mind. You now know the truth, there's something horrible out there, stop it and its minions at all costs." return 0 - return fizzle() diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 64408038f6e..d0600b4cca9 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -346,9 +346,44 @@ var/global/datum/controller/occupations/job_master proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0) + if(!H) return 0 + var/datum/job/job = GetJob(rank) + var/list/spawn_in_storage = list() + if(job) + + //Equip custom gear loadout. + if(H.client.prefs.gear && H.client.prefs.gear.len) + + for(var/thing in H.client.prefs.gear) + var/datum/gear/G = gear_datums[thing] + if(G) + var/permitted + if(G.allowed_roles) + for(var/job_name in G.allowed_roles) + if(job.title == job_name) + permitted = 1 + else + permitted = 1 + + if(G.whitelisted && !is_alien_whitelisted(H, G.whitelisted)) + permitted = 0 + + if(!permitted) + H << "\red Your current job or whitelist status does not permit you to spawn with [thing]!" + continue + + if(G.slot) + H.equip_to_slot_or_del(new G.path(H), G.slot) + H << "\blue Equipping you with [thing]!" + + else + spawn_in_storage += thing + + + //Equip job items. job.equip(H) else H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator." @@ -428,17 +463,32 @@ var/global/datum/controller/occupations/job_master new /obj/item/weapon/storage/box/survival(BPK) H.equip_to_slot_or_del(BPK, slot_back,1) + //Deferred item spawning. + if(spawn_in_storage && spawn_in_storage.len) + var/obj/item/weapon/storage/B + for(var/obj/item/weapon/storage/S in H.contents) + B = S + break + + if(!isnull(B)) + for(var/thing in spawn_in_storage) + H << "\blue Placing [thing] in your [B]!" + var/datum/gear/G = gear_datums[thing] + new G.path(B) + else + H << "\red Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug." + //TODO: Generalize this by-species if(H.species) if(H.species.name == "Tajaran" || H.species.name == "Unathi") H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes,1) else if(H.species.name == "Vox") - H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(src), slot_wear_mask) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask) if(!H.r_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_r_hand) H.internal = H.r_hand else if (!H.l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_l_hand) H.internal = H.l_hand H.internals.icon_state = "internal1" diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index eb1e9118493..76139556270 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -105,6 +105,9 @@ var/temperature_dangerlevel = 0 var/other_dangerlevel = 0 + var/alarm_sound_cooldown = 200 + var/last_sound_time = 0 + /obj/machinery/alarm/server/New() ..() req_access = list(access_rd, access_atmospherics, access_engine_equip) @@ -169,6 +172,9 @@ var/turf/simulated/location = loc if(!istype(location)) return//returns if loc is not simulated + if ((alarm_area.fire || alarm_area.atmosalm >= 2) && world.time > last_sound_time + alarm_sound_cooldown) + last_sound_time = world.time + var/datum/gas_mixture/environment = location.return_air() //Handle temperature adjustment here. @@ -317,11 +323,11 @@ if((stat & (NOPOWER|BROKEN)) || shorted) icon_state = "alarmp" return - + var/icon_level = danger_level if (alarm_area.atmosalm) icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow - + switch(icon_level) if (0) icon_state = "alarm0" @@ -727,7 +733,7 @@ Toxins: [phoron_percent]%
output += "Fire alarm in area" else output += "No alerts" - + return output /obj/machinery/alarm/proc/rcon_text() diff --git a/code/game/machinery/bots/farmbot.dm b/code/game/machinery/bots/farmbot.dm index 228b525049a..1c0bd0875fb 100644 --- a/code/game/machinery/bots/farmbot.dm +++ b/code/game/machinery/bots/farmbot.dm @@ -394,7 +394,7 @@ if ( emagged ) // Warning, hungry humans detected: throw fertilizer at them spawn(0) fert.loc = src.loc - fert.throw_at(target, 16, 3) + fert.throw_at(target, 16, 3, src) src.visible_message("\red [src] launches [fert.name] at [target.name]!") flick("farmbot_broke", src) spawn (FARMBOT_EMAG_DELAY) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 06efb4673cf..fb6a197c684 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -713,9 +713,7 @@ Auto Patrol: []"}, Sa.overlays += image('icons/obj/aibots.dmi', "hs_hole") Sa.created_name = src.name new /obj/item/device/assembly/prox_sensor(Tsec) - - var/obj/item/weapon/melee/baton/B = new /obj/item/weapon/melee/baton(Tsec) - B.charges = 0 + new /obj/item/weapon/melee/baton(Tsec) if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 4b2fce70cd8..b74d3a587a8 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -217,7 +217,7 @@ var/obj/item/meatslab = allmeat[i] var/turf/Tx = locate(src.x - i, src.y, src.z) meatslab.loc = src.loc - meatslab.throw_at(Tx,i,3) + meatslab.throw_at(Tx,i,3,src) if (!Tx.density) new /obj/effect/decal/cleanable/blood/gibs(Tx,i) src.operating = 0 diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 161dfc01ce7..3b86ea400e5 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -28,18 +28,6 @@ input = /obj/item/weapon/reagent_containers/food/snacks/meat output = /obj/item/weapon/reagent_containers/food/snacks/meatball - meat2 - input = /obj/item/weapon/syntiflesh - output = /obj/item/weapon/reagent_containers/food/snacks/meatball -/* - monkeymeat - input = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey - output = /obj/item/weapon/reagent_containers/food/snacks/meatball - - humanmeat - input = /obj/item/weapon/reagent_containers/food/snacks/meat/human - output = /obj/item/weapon/reagent_containers/food/snacks/meatball -*/ potato input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato output = /obj/item/weapon/reagent_containers/food/snacks/rawsticks diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 6242626bc79..8eca8dce3af 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -403,7 +403,7 @@ if(!throw_item) return 0 spawn(0) - throw_item.throw_at(target,16,3) + throw_item.throw_at(target,16,3,src) src.visible_message("\red [src] launches [throw_item.name] at [target.name]!") return 1 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 307db252400..5b4366259ee 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -75,25 +75,25 @@ obj/machinery/recharger/process() if(E.power_supply.charge < E.power_supply.maxcharge) E.power_supply.give(100) icon_state = icon_state_charging - use_power(250) + use_power(250/CELLRATE) else icon_state = icon_state_charged return if(istype(charging, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = charging - if(B.charges < initial(B.charges)) - B.charges++ - icon_state = icon_state_charging - use_power(150) - else - icon_state = icon_state_charged + if(B.bcell) + if(B.bcell.give(1500)) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti + icon_state = icon_state_charging + use_power(200/CELLRATE) + else + icon_state = icon_state_charged return if(istype(charging, /obj/item/device/laptop)) var/obj/item/device/laptop/L = charging if(L.stored_computer.battery.charge < L.stored_computer.battery.maxcharge) L.stored_computer.battery.give(100) icon_state = icon_state_charging - use_power(250) + use_power(250/CELLRATE) else icon_state = icon_state_charged return @@ -110,7 +110,8 @@ obj/machinery/recharger/emp_act(severity) else if(istype(charging, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = charging - B.charges = 0 + if(B.bcell) + B.bcell.charge = 0 ..(severity) obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. @@ -122,8 +123,6 @@ obj/machinery/recharger/update_icon() //we have an update_icon() in addition to // Atlantis: No need for that copy-pasta code, just use var to store icon_states instead. obj/machinery/recharger/wallcharger name = "wall recharger" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "wrecharger0" - icon_state_idle = "wrecharger0" + icon_state_charged = "wrecharger2" icon_state_charging = "wrecharger1" - icon_state_charged = "wrecharger2" \ No newline at end of file + icon_state_idle = "wrecharger0" diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a0404c6be9e..1eb6096dc38 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -562,7 +562,7 @@ if (!throw_item) return 0 spawn(0) - throw_item.throw_at(target, 16, 3) + throw_item.throw_at(target, 16, 3, src) src.visible_message("\red [src] launches [throw_item.name] at [target.name]!") return 1 diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 08cc9a65d04..629e3b9d7de 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -464,7 +464,7 @@ return else if(target!=locked) if(locked in view(chassis)) - locked.throw_at(target, 14, 1.5) + locked.throw_at(target, 14, 1.5, chassis) locked = null send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) set_ready_state(0) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index e8a9dc072ff..fb1174814d1 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -231,7 +231,7 @@ var/missile_range = 30 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/Fire(atom/movable/AM, atom/target, turf/aimloc) - AM.throw_at(target,missile_range, missile_speed) + AM.throw_at(target,missile_range, missile_speed, chassis) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive name = "SRM-8 Missile Rack" diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e3465c3b7c3..0cb89ee683d 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -469,6 +469,7 @@ return /obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper + ..() src.log_message("Hit by [A].",1) call((proc_res["dynhitby"]||src), "dynhitby")(A) return diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index f7f893ebbe5..19d146b82cd 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -2,10 +2,19 @@ name = "portable suit cooling unit" desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling." w_class = 4 - icon = 'icons/obj/device.dmi' //temporary, I hope + icon = 'icons/obj/device.dmi' icon_state = "suitcooler0" slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage + //copied from tank.dm + flags = FPRINT | TABLEPASS | CONDUCT + force = 5.0 + throwforce = 10.0 + throw_speed = 1 + throw_range = 4 + + origin_tech = "magnets=2;materials=2" + var/on = 0 //is it turned on? var/cover_open = 0 //is the cover open? var/obj/item/weapon/cell/cell diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 76b3dc36948..378600d5fec 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -29,6 +29,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ null, \ new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \ new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \ + new/datum/stack_recipe("metal baseball bat", /obj/item/weapon/baseballbat/metal, 10, time = 20, one_per_turf = 0, on_floor = 1), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1), \ null, \ new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1), \ @@ -70,6 +71,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("air alarm frame", /obj/item/alarm_frame, 2), \ new/datum/stack_recipe("fire alarm frame", /obj/item/firealarm_frame, 2), \ null, \ + new/datum/stack_recipe("knife blade", /obj/item/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1) \ ) /obj/item/stack/sheet/metal @@ -103,6 +105,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1), \ new/datum/stack_recipe("RUST fuel assembly port frame", /obj/item/rust_fuel_assembly_port_frame, 12, time = 50, one_per_turf = 1), \ new/datum/stack_recipe("RUST fuel compressor frame", /obj/item/rust_fuel_compressor_frame, 12, time = 50, one_per_turf = 1), \ + new/datum/stack_recipe("knife grip", /obj/item/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1), ) /obj/item/stack/sheet/plasteel @@ -132,6 +135,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0), \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("baseball bat", /obj/item/weapon/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1) \ // new/datum/stack_recipe("apiary", /obj/item/apiary, 10, time = 25, one_per_turf = 0, on_floor = 0) ) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 219843e68b3..652e51e95c9 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -82,16 +82,19 @@ C = usr.buckled var/obj/B = usr.buckled var/movementdirection = turn(direction,180) - if(C) C.propelled = 1 - B.Move(get_step(usr,movementdirection), movementdirection) - sleep(1) + if(C) C.propelled = 4 B.Move(get_step(usr,movementdirection), movementdirection) sleep(1) B.Move(get_step(usr,movementdirection), movementdirection) + if(C) C.propelled = 3 + sleep(1) + B.Move(get_step(usr,movementdirection), movementdirection) sleep(1) B.Move(get_step(usr,movementdirection), movementdirection) + if(C) C.propelled = 2 sleep(2) B.Move(get_step(usr,movementdirection), movementdirection) + if(C) C.propelled = 1 sleep(2) B.Move(get_step(usr,movementdirection), movementdirection) if(C) C.propelled = 0 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 8f39aaa45a1..7424c666bec 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -147,5 +147,18 @@ var/last_chew = 0 /obj/item/weapon/handcuffs/cable/white color = "#FFFFFF" +/obj/item/weapon/handcuffs/cable/attackby(var/obj/item/I, mob/user as mob) + ..() + if(istype(I, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = I + var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod + R.use(1) + + user.put_in_hands(W) + user << "You wrap the cable restraint around the top of the rod." + del(src) + update_icon(user) + + /obj/item/weapon/handcuffs/cyborg dispenser = 1 diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 2b853d0ae2b..b64a109dff0 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -1,66 +1,117 @@ +//replaces our stun baton code with /tg/station's code /obj/item/weapon/melee/baton - name = "stun baton" + name = "stunbaton" desc = "A stun baton for incapacitating people with." icon_state = "stunbaton" item_state = "baton" - flags = FPRINT | TABLEPASS slot_flags = SLOT_BELT - force = 10 + force = 15 + sharp = 0 + edge = 0 throwforce = 7 w_class = 3 - var/charges = 10 - var/status = 0 - var/mob/foundmob = "" //Used in throwing proc. - origin_tech = "combat=2" + attack_verb = list("beaten") + var/stunforce = 7 + var/status = 0 + var/obj/item/weapon/cell/high/bcell = null + var/hitcost = 1000 - suicide_act(mob/user) - viewers(user) << "\red [user] is putting the live [src.name] in \his mouth! It looks like \he's trying to commit suicide." - return (FIRELOSS) +/obj/item/weapon/melee/baton/suicide_act(mob/user) + user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") + return (FIRELOSS) + +/obj/item/weapon/melee/baton/New() + ..() + update_icon() + return + + +/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. + ..() + bcell = new(src) + update_icon() + return + +/obj/item/weapon/melee/baton/proc/deductcharge(var/chrgdeductamt) + if(bcell) + if(bcell.use(chrgdeductamt)) + return 1 + else + status = 0 + update_icon() + return 0 /obj/item/weapon/melee/baton/update_icon() if(status) - icon_state = "stunbaton_active" + icon_state = "[initial(name)]_active" + else if(!bcell) + icon_state = "[initial(name)]_nocell" else - icon_state = "stunbaton" + icon_state = "[initial(name)]" -/obj/item/weapon/melee/baton/attack_self(mob/user as mob) - if(status && (CLUMSY in user.mutations) && prob(50)) - user << "\red You grab the [src] on the wrong side." - user.Weaken(30) - charges-- - if(charges < 1) +/obj/item/weapon/melee/baton/examine() + set src in view(1) + ..() + if(bcell) + usr <<"The baton is [round(bcell.percent())]% charged." + if(!bcell) + usr <<"The baton does not have a power source installed." + +/obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/weapon/cell)) + if(!bcell) + user.drop_item() + W.loc = src + bcell = W + user << "You install a cell in [src]." + update_icon() + else + user << "[src] already has a cell." + + else if(istype(W, /obj/item/weapon/screwdriver)) + if(bcell) + bcell.updateicon() + bcell.loc = get_turf(src.loc) + bcell = null + user << "You remove the cell from the [src]." status = 0 update_icon() - return - if(charges > 0) + return + ..() + return + +/obj/item/weapon/melee/baton/attack_self(mob/user) + if(bcell && bcell.charge > hitcost) status = !status - user << "\The [src] is now [status ? "on" : "off"]." - playsound(src.loc, "sparks", 75, 1, -1) + user << "[src] is now [status ? "on" : "off"]." + playsound(loc, "sparks", 75, 1, -1) update_icon() else status = 0 - user << "\The [src] is out of charge." + if(!bcell) + user << "[src] does not have a power source!" + else + user << "[src] is out of charge." add_fingerprint(user) -/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob) + +/obj/item/weapon/melee/baton/attack(mob/M, mob/user) if(status && (CLUMSY in user.mutations) && prob(50)) - user << "You accidentally hit yourself with the [src]!" + user << "span class='danger'>You accidentally hit yourself with the [src]!" user.Weaken(30) - charges-- - if(charges < 1) - status = 0 - update_icon() + deductcharge(hitcost) return - var/mob/living/carbon/human/H = M + if(isrobot(M)) ..() return + var/mob/living/carbon/human/H = M + if(user.a_intent == "hurt") if(!..()) return - //H.apply_effect(5, WEAKEN, 0) H.visible_message("[M] has been beaten with the [src] by [user]!") user.attack_log += "\[[time_stamp()]\] Beat [H.name] ([H.ckey]) with [src.name]" @@ -68,41 +119,56 @@ msg_admin_attack("[user.name] ([user.ckey]) beat [H.name] ([H.ckey]) with [src.name] (JMP)") playsound(src.loc, "swing_hit", 50, 1, -1) + else if(!status) - H.visible_message("[M] has been prodded with the [src] by [user]. Luckily it was off.") + H.visible_message("[H] has been prodded with [src] by [user]. Luckily it was off.") return + var/stunroll = (rand(1,100)) + if(status) - H.apply_effect(10, STUN, 0) - H.apply_effect(10, WEAKEN, 0) - H.apply_effect(10, STUTTER, 0) - user.lastattacked = M + user.lastattacked = H H.lastattacker = user - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - if(R && R.cell) - R.cell.use(50) - else - charges-- - H.visible_message("[M] has been stunned with the [src] by [user]!") + if(user == H) // Attacking yourself can't miss + stunroll = 100 + if(stunroll < 40) + H.visible_message("\red [user] misses [H] with \the [src]!") + msg_admin_attack("[key_name(user)] attempted to stun [key_name(H)] with the [src].") + return + H.Stun(stunforce) + H.Weaken(stunforce) + H.apply_effect(STUTTER, stunforce) + + H.visible_message("[H] has been stunned with [src] by [user]!") + playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) + + msg_admin_attack("[key_name(user)] stunned [key_name(H)] with the [src].") user.attack_log += "\[[time_stamp()]\] Stunned [H.name] ([H.ckey]) with [src.name]" H.attack_log += "\[[time_stamp()]\] Stunned by [user.name] ([user.ckey]) with [src.name]" - msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name]") - playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - if(charges < 1) - status = 0 - update_icon() - - add_fingerprint(user) + if(isrobot(loc)) + var/mob/living/silicon/robot/R = loc + if(R && R.cell) + R.cell.use(hitcost) + else + deductcharge(hitcost) /obj/item/weapon/melee/baton/emp_act(severity) - switch(severity) - if(1) - charges = 0 - if(2) - charges = max(0, charges - 5) - if(charges < 1) - status = 0 - update_icon() + if(bcell) + deductcharge(1000 / severity) + if(bcell.reliability != 100 && prob(50/severity)) + bcell.reliability -= 10 / severity + ..() + +//Makeshift stun baton. Replacement for stun gloves. +/obj/item/weapon/melee/baton/cattleprod + name = "stunprod" + desc = "An improvised stun baton." + icon_state = "stunprod_nocell" + item_state = "prod" + force = 3 + throwforce = 5 + stunforce = 5 + hitcost = 2500 + slot_flags = null diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index abff1a9b5b5..8626f365a32 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -179,4 +179,27 @@ if(wielded) return 1 else - return 0 \ No newline at end of file + return 0 + +//spears, bay edition +/obj/item/weapon/twohanded/spear + icon_state = "spearglass0" + name = "spear" + desc = "A haphazardly-constructed yet still deadly weapon of ancient design." + force = 14 + w_class = 4.0 + slot_flags = SLOT_BACK + force_unwielded = 14 + force_wielded = 22 // Was 13, Buffed - RR + throwforce = 20 + throw_speed = 3 + edge = 1 + sharp = 1 + flags = NOSHIELD + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + +/obj/item/weapon/twohanded/spear/update_icon() + icon_state = "spearglass[wielded]" + return + diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index d087ca28cff..64d72508d31 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -152,4 +152,143 @@ force = 20 throwforce = 15 w_class = 3 - attack_verb = list("jabbed","stabbed","ripped") \ No newline at end of file + attack_verb = list("jabbed","stabbed","ripped") + +/obj/item/weapon/baseballbat + name = "wooden bat" + desc = "HOME RUN!" + icon_state = "woodbat" + item_state = "woodbat" + sharp = 0 + edge = 0 + w_class = 3 + force = 15 + throw_speed = 3 + throw_range = 7 + throwforce = 7 + attack_verb = list("smashed", "beaten", "slammed", "smacked", "striked", "battered", "bonked") + hitsound = 'sound/weapons/genhit3.ogg' + + +/obj/item/weapon/baseballbat/metal + name = "metal bat" + desc = "A shiny metal bat." + icon_state = "metalbat" + item_state = "metalbat" + force = 18 + w_class = 3.0 + +/obj/item/weapon/butterfly + name = "butterfly knife" + desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket." + icon_state = "butterflyknife" + item_state = null + hitsound = null + var/active = 0 + w_class = 2 + force = 2 + sharp = 0 + edge = 0 + throw_speed = 3 + throw_range = 4 + throwforce = 7 + attack_verb = list("patted", "tapped") + +/obj/item/butterflyconstruction + name = "unfinished concealed knife" + desc = "An unfinished concealed knife, it looks like the screws need to be tightened." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterflystep1" + +/obj/item/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/screwdriver)) + user << "You finish the concealed blade weapon." + new /obj/item/weapon/butterfly(user.loc) + del(src) + return + +/obj/item/butterflyblade + name = "knife blade" + desc = "A knife blade. Unusable as a weapon without a grip." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterfly2" + matter = list("metal" = 5000) + +/obj/item/butterflyhandle + name = "concealed knife grip" + desc = "A plasteel grip with screw fittings for a blade." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterfly1" + matter = list("metal" = 4000) + +/obj/item/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/butterflyblade)) + user << "You attach the two concealed blade parts." + new /obj/item/butterflyconstruction(user.loc) + del(W) + del(src) + return + update_icon(user) + +/obj/item/weapon/butterfly/switchblade + name = "/proper switchblade" + desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster." + icon_state = "switchblade" + +/obj/item/weapon/butterfly/attack_self(mob/user) + active = !active + if(active) + user << "You flip out your [src]." + playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) + force = 15 //bay adjustments + throwforce = 12 + edge = 1 + sharp = 1 + hitsound = 'sound/weapons/bladeslice.ogg' + icon_state += "_open" + w_class = 3 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + else + user << "The butterfly knife can now be concealed." + force = initial(force) + edge = 0 + sharp = 0 + hitsound = initial(hitsound) + icon_state = initial(icon_state) + w_class = initial(w_class) + attack_verb = initial(attack_verb) + add_fingerprint(user) + + +obj/item/weapon/wirerod + name = "wired rod" + desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." + icon_state = "wiredrod" + item_state = "rods" + flags = CONDUCT + force = 8 + throwforce = 10 + w_class = 3 + attack_verb = list("hit", "bludgeoned", "whacked", "bonked") + + +obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob) + ..() + if(istype(I, /obj/item/weapon/shard)) + var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear + + user.put_in_hands(S) + user << "You fasten the glass shard to the top of the rod with the cable." + del(I) + del(src) + update_icon(user) + + else if(istype(I, /obj/item/weapon/wirecutters)) + var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod + + user.put_in_hands(P) + user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward." + del(I) + del(src) + update_icon(user) + update_icon(user) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 289150af220..30d6c758a3f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -119,7 +119,7 @@ new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/belt/security(src) new /obj/item/device/flash(src) - new /obj/item/weapon/melee/baton(src) + new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/clothing/tie/holster/waist(src) new /obj/item/weapon/melee/telebaton(src) @@ -157,7 +157,7 @@ new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/belt/security(src) new /obj/item/weapon/reagent_containers/spray/pepper(src) - new /obj/item/weapon/melee/baton(src) + new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/taser(src) new /obj/item/weapon/storage/box/holobadge(src) return @@ -189,7 +189,7 @@ new /obj/item/device/flash(src) new /obj/item/weapon/reagent_containers/spray/pepper(src) new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/melee/baton(src) + new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/taser(src) new /obj/item/clothing/glasses/sunglasses/sechud(src) new /obj/item/taperoll/police(src) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 01f06f14a4b..19bbcf36f45 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -71,7 +71,9 @@ "You hear metal clanking") unbuckle() src.add_fingerprint(user) - return + return 1 + + return 0 /obj/structure/stool/bed/proc/buckle_mob(mob/M as mob, mob/user as mob) if (!ticker) @@ -112,6 +114,18 @@ icon_state = "down" anchored = 0 +/obj/structure/stool/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/roller_holder)) + if(buckled_mob) + manual_unbuckle() + else + visible_message("[user] collapses \the [src.name].") + new/obj/item/roller(get_turf(src)) + spawn(0) + del(src) + return + ..() + /obj/item/roller name = "roller bed" desc = "A collapsed roller bed that can be carried around." @@ -119,11 +133,47 @@ icon_state = "folded" w_class = 4.0 // Can't be put in backpacks. Oh well. - attack_self(mob/user) +/obj/item/roller/attack_self(mob/user) var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc) R.add_fingerprint(user) del(src) +/obj/item/roller/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if(istype(W,/obj/item/roller_holder)) + var/obj/item/roller_holder/RH = W + if(!RH.held) + user << "\blue You collect the roller bed." + src.loc = RH + RH.held = src + return + + ..() + +/obj/item/roller_holder + name = "roller bed rack" + desc = "A rack for carrying a collapsed roller bed." + icon = 'icons/obj/rollerbed.dmi' + icon_state = "folded" + var/obj/item/roller/held + +/obj/item/roller_holder/New() + ..() + held = new /obj/item/roller(src) + +/obj/item/roller_holder/attack_self(mob/user as mob) + + if(!held) + user << "\blue The rack is empty." + return + + user << "\blue You deploy the roller bed." + var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc) + R.add_fingerprint(user) + del(held) + held = null + + /obj/structure/stool/bed/roller/Move() ..() if(buckled_mob) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 9982017c6bb..115806277cd 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -138,7 +138,7 @@ if(propelled) var/mob/living/occupant = buckled_mob unbuckle() - occupant.throw_at(A, 3, 2) + occupant.throw_at(A, 3, propelled) occupant.apply_effect(6, STUN, 0) occupant.apply_effect(6, WEAKEN, 0) occupant.apply_effect(6, STUTTER, 0) diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index adec836a78d..705351acfc4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -136,7 +136,12 @@ if(propelled || (pulling && (pulling.a_intent == "hurt"))) var/mob/living/occupant = buckled_mob unbuckle() - occupant.throw_at(A, 3, 2) + + if (pulling && (pulling.a_intent == "hurt")) + occupant.throw_at(A, 3, 3, pulling) + else if (propelled) + occupant.throw_at(A, 3, propelled) + occupant.apply_effect(6, STUN, 0) occupant.apply_effect(6, WEAKEN, 0) occupant.apply_effect(6, STUTTER, 0) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c509ce02ff4..41b3bec5013 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -370,20 +370,21 @@ else if (istype(O, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = O - if (B.charges > 0 && B.status == 1) - flick("baton_active", src) - user.Stun(10) - user.stuttering = 10 - user.Weaken(10) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= 20 - else - B.charges-- - user.visible_message( \ - "[user] was stunned by his wet [O].", \ - "\red You have wet \the [O], it shocks you!") - return + if(B.bcell) + if(B.bcell.charge > 0 && B.status == 1) + flick("baton_active", src) + user.Stun(10) + user.stuttering = 10 + user.Weaken(10) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.cell.charge -= 20 + else + B.deductcharge(B.hitcost) + user.visible_message( \ + "[user] was stunned by \his wet [O]!", \ + "[user] was stunned by \his wet [O]!") + return var/turf/location = user.loc if(!isturf(location)) return diff --git a/code/game/sound.dm b/code/game/sound.dm index b79504bf1d7..3f89ea4d18d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -25,13 +25,26 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur var/mob/M = P if(!M || !M.client) continue - if(get_dist(M, turf_source) <= world.view + extrarange) + + var/distance = get_dist(M, turf_source) + if(distance <= (world.view + extrarange) * 3) var/turf/T = get_turf(M) + if(T && T.z == turf_source.z) - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff) + //check that the air can transmit sound + var/datum/gas_mixture/environment = T.return_air() + if (!environment || environment.return_pressure() < SOUND_MINIMUM_PRESSURE) + if (distance > 1) + continue + + var/new_frequency = 32000 + (frequency - 32000)*0.125 //lower the frequency. very rudimentary + var/new_volume = vol*0.15 //muffle the sound, like we're hearing through contact + M.playsound_local(turf_source, soundin, new_volume, vary, new_frequency, falloff) + else + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff) -var/const/FALLOFF_SOUNDS = 1 -var/const/SURROUND_CAP = 7 +var/const/FALLOFF_SOUNDS = 2 +var/const/SURROUND_CAP = 255 /mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff) if(!src.client || ear_deaf > 0) return @@ -41,6 +54,7 @@ var/const/SURROUND_CAP = 7 S.wait = 0 //No queue S.channel = 0 //Any channel S.volume = vol + S.environment = 2 if (vary) if(frequency) @@ -51,6 +65,9 @@ var/const/SURROUND_CAP = 7 if(isturf(turf_source)) // 3D sounds, the technology is here! var/turf/T = get_turf(src) + S.volume -= get_dist(T, turf_source) * 0.75 + if (S.volume < 0) + S.volume = 0 var/dx = turf_source.x - T.x // Hearing from the right/left S.x = round(max(-SURROUND_CAP, min(SURROUND_CAP, dx)), 1) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7bd69137d78..9a14b8fbff5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -73,8 +73,9 @@ datum/preferences var/r_eyes = 0 //Eye color var/g_eyes = 0 //Eye color var/b_eyes = 0 //Eye color - var/species = "Human" + var/species = "Human" //Species datum to use. var/language = "None" //Secondary language + var/list/gear //Custom/fluff item loadout. //Mob preview var/icon/preview_icon = null @@ -104,7 +105,6 @@ datum/preferences // maps each organ to either null(intact), "cyborg" or "amputated" // will probably not be able to do this for head and torso ;) var/list/organ_data = list() - var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" var/flavor_text = "" @@ -132,6 +132,8 @@ datum/preferences gender = pick(MALE, FEMALE) real_name = random_name(gender) + gear = list() + /datum/preferences proc/ZeroSkills(var/forced = 0) for(var/V in SKILLS) for(var/datum/skill/S in SKILLS[V]) @@ -264,7 +266,27 @@ datum/preferences if(config.allow_Metadata) dat += "OOC Notes: Edit
" - dat += "
Occupation Choices
" + dat += "
Custom Loadout: " + var/total_cost = 0 + + if(isnull(gear) || !islist(gear)) gear = list() + + if(gear && gear.len) + dat += "
" + for(var/gear_name in gear) + if(gear_datums[gear_name]) + var/datum/gear/G = gear_datums[gear_name] + total_cost += G.cost + dat += "[gear_name] \[remove\]
" + + dat += "Used: [total_cost] points." + else + dat += "none." + + if(total_cost < MAX_GEAR_COST) + dat += " \[add\]" + + dat += "

Occupation Choices
" dat += "\tSet Preferences
" dat += "
Body " @@ -835,6 +857,48 @@ datum/preferences ShowChoices(user) return 1 + else if (href_list["preference"] == "loadout") + + if(href_list["task"] == "input") + + var/list/valid_gear_choices = list() + + for(var/gear_name in gear_datums) + var/datum/gear/G = gear_datums[gear_name] + if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) + continue + valid_gear_choices += gear_name + + var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices + + if(choice && gear_datums[choice]) + + var/total_cost = 0 + + if(isnull(gear) || !islist(gear)) gear = list() + + if(gear && gear.len) + for(var/gear_name in gear) + if(gear_datums[gear_name]) + var/datum/gear/G = gear_datums[gear_name] + total_cost += G.cost + + var/datum/gear/C = gear_datums[choice] + total_cost += C.cost + if(C && total_cost <= MAX_GEAR_COST) + gear += choice + user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + else + user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + + else if(href_list["task"] == "remove") + var/to_remove = href_list["gear"] + if(!to_remove) return + for(var/gear_name in gear) + if(gear_name == to_remove) + gear -= gear_name + break + switch(href_list["task"]) if("random") switch(href_list["preference"]) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm new file mode 100644 index 00000000000..aee6547694a --- /dev/null +++ b/code/modules/client/preferences_gear.dm @@ -0,0 +1,407 @@ +var/global/list/gear_datums = list() + +proc/populate_gear_list() + for(var/type in typesof(/datum/gear)-/datum/gear) + var/datum/gear/G = new type() + gear_datums[G.display_name] = G + +/datum/gear + var/display_name //Name/index. + var/path //Path to item. + var/cost //Number of points used. + var/slot //Slot to equip to. + var/list/allowed_roles //Roles that can spawn with this item. + var/whitelisted //Term to check the whitelist for.. + +//Standard gear datums. + +/datum/gear/cards + display_name = "deck of cards" + path = /obj/item/weapon/deck + cost = 2 + +/datum/gear/dice + display_name = "d20" + path = /obj/item/weapon/dice/d20 + cost = 1 + +/datum/gear/comb + display_name = "purple comb" + path = /obj/item/weapon/fluff/cado_keppel_1 + cost = 1 + +/datum/gear/tie_horrible + display_name = "horrible tie" + path = /obj/item/clothing/tie/horrible + cost = 2 + +/datum/gear/tie_blue + display_name = "blue tie" + path = /obj/item/clothing/tie/blue + cost = 2 + +/datum/gear/tie_red + display_name = "red tie" + path = /obj/item/clothing/tie/red + cost = 2 + +/datum/gear/hairflower + display_name = "hair flower pin" + path = /obj/item/clothing/head/hairflower + cost = 2 + slot = slot_head + +/datum/gear/bandana + display_name = "pirate bandana" + path = /obj/item/clothing/head/bandana + cost = 3 + slot = slot_head + +/datum/gear/overalls + display_name = "overalls" + path = /obj/item/clothing/suit/apron/overalls + cost = 2 + slot = slot_wear_suit + +/datum/gear/wcoat + display_name = "waistcoat" + path = /obj/item/clothing/suit/wcoat + cost = 2 + slot = slot_wear_suit + +/datum/gear/prescription + display_name = "prescription sunglasses" + path = /obj/item/clothing/glasses/sunglasses/prescription + cost = 3 + slot = slot_glasses + +/datum/gear/eyepatch + display_name = "eyepatch" + path = /obj/item/clothing/glasses/eyepatch + cost = 3 + slot = slot_glasses + +/datum/gear/flatcap + display_name = "flat cap" + path = /obj/item/clothing/head/flatcap + cost = 2 + slot = slot_head + +/datum/gear/labcoat + display_name = "labcoat" + path = /obj/item/clothing/suit/storage/labcoat + cost = 3 + slot = slot_wear_suit + +/datum/gear/sandal + display_name = "sandals" + path = /obj/item/clothing/shoes/sandal + cost = 1 + slot = slot_shoes + +/datum/gear/leather + display_name = "leather shoes" + path = /obj/item/clothing/shoes/leather + cost = 2 + slot = slot_shoes + +/datum/gear/dress_shoes + display_name = "dress shoes" + path = /obj/item/clothing/shoes/centcom + cost = 2 + slot = slot_shoes + +/datum/gear/black_gloves + display_name = "black gloves" + path = /obj/item/clothing/gloves/black + cost = 1 + slot = slot_gloves + +/datum/gear/red_gloves + display_name = "red gloves" + path = /obj/item/clothing/gloves/red + cost = 1 + slot = slot_gloves + +/datum/gear/blue_gloves + display_name = "blue gloves" + path = /obj/item/clothing/gloves/blue + cost = 1 + slot = slot_gloves + +/datum/gear/orange_gloves + display_name = "orange gloves" + path = /obj/item/clothing/gloves/orange + cost = 1 + slot = slot_gloves + +/datum/gear/purple_gloves + display_name = "purple gloves" + path = /obj/item/clothing/gloves/purple + cost = 1 + slot = slot_gloves + +/datum/gear/brown_gloves + display_name = "brown gloves" + path = /obj/item/clothing/gloves/brown + cost = 1 + slot = slot_gloves + +/datum/gear/green_gloves + display_name = "green gloves" + path = /obj/item/clothing/gloves/green + cost = 2 + slot = slot_gloves + +/datum/gear/white_gloves + display_name = "white gloves" + path = /obj/item/clothing/gloves/white + cost = 2 + slot = slot_gloves + +/datum/gear/black_shoes + display_name = "black shoes" + path = /obj/item/clothing/shoes/black + cost = 2 + slot = slot_shoes + +/datum/gear/blue_shoes + display_name = "blue shoes" + path = /obj/item/clothing/shoes/blue + cost = 2 + slot = slot_shoes + +/datum/gear/brown_shoes + display_name = "brown shoes" + path = /obj/item/clothing/shoes/brown + cost = 2 + slot = slot_shoes + +/datum/gear/green_shoes + display_name = "green shoes" + path = /obj/item/clothing/shoes/green + cost = 2 + slot = slot_shoes + +/datum/gear/orange_shoes + display_name = "orange shoes" + path = /obj/item/clothing/shoes/orange + cost = 2 + slot = slot_shoes + +/datum/gear/purple_shoes + display_name = "purple shoes" + path = /obj/item/clothing/shoes/purple + cost = 2 + slot = slot_shoes + +/datum/gear/red_shoes + display_name = "red shoes" + path = /obj/item/clothing/shoes/red + cost = 2 + slot = slot_shoes + +/datum/gear/white_shoes + display_name = "white shoes" + path = /obj/item/clothing/shoes/white + cost = 2 + slot = slot_shoes + +/datum/gear/yellow_shoes + display_name = "yellow shoes" + path = /obj/item/clothing/shoes/yellow + cost = 2 + slot = slot_shoes + +/datum/gear/jackboots + display_name = "jackboots" + path = /obj/item/clothing/shoes/jackboots + cost = 3 + slot = slot_shoes + +/datum/gear/webbing + display_name = "webbing" + path = /obj/item/clothing/tie/storage/webbing + cost = 1 + +/datum/gear/armband + display_name = "red armband" + path = /obj/item/clothing/tie/armband + cost = 1 + +/datum/gear/armband_cargo + display_name = "cargo armband" + path = /obj/item/clothing/tie/armband/cargo + cost = 1 + +/datum/gear/armband_engineering + display_name = "engineering armband" + path = /obj/item/clothing/tie/armband/engine + cost = 1 + +/datum/gear/armband_science + display_name = "science armband" + path = /obj/item/clothing/tie/armband/science + cost = 1 + +/datum/gear/armband_hydroponics + display_name = "hydroponics armband" + path = /obj/item/clothing/tie/armband/hydro + cost = 1 + +/datum/gear/armband_medical + display_name = "medical armband" + path = /obj/item/clothing/tie/armband/med + cost = 1 + +/datum/gear/armband_emt + display_name = "EMT armband" + path = /obj/item/clothing/tie/armband/medgreen + cost = 1 + +/datum/gear/skirt_blue + display_name = "blue plaid skirt" + path = /obj/item/clothing/under/dress/plaid_blue + slot = slot_w_uniform + cost = 3 + +/datum/gear/skirt_red + display_name = "red plaid skirt" + path = /obj/item/clothing/under/dress/plaid_red + slot = slot_w_uniform + cost = 3 + +/datum/gear/skirt_purple + display_name = "purple plaid skirt" + path = /obj/item/clothing/under/dress/plaid_purple + slot = slot_w_uniform + cost = 3 + +/datum/gear/skirt_black + display_name = "black skirt" + path = /obj/item/clothing/under/blackskirt + slot = slot_w_uniform + cost = 3 + +/datum/gear/sundress + display_name = "sundress" + path = /obj/item/clothing/under/sundress + slot = slot_w_uniform + cost = 3 + +/datum/gear/uniform_captain + display_name = "captain's dress uniform" + path = /obj/item/clothing/under/dress/dress_cap + slot = slot_w_uniform + cost = 3 + allowed_roles = list("Captain") + +/datum/gear/uniform_hop + display_name = "HoP dress uniform" + path = /obj/item/clothing/under/dress/dress_hop + slot = slot_w_uniform + cost = 3 + allowed_roles = list("Head of Personnel") + +/datum/gear/uniform_hr + display_name = "HR director uniform" + path = /obj/item/clothing/under/dress/dress_hr + slot = slot_w_uniform + cost = 3 + allowed_roles = list("Head of Personnel") + +/datum/gear/kilt + display_name = "kilt" + path = /obj/item/clothing/under/kilt + slot = slot_w_uniform + cost = 3 + +/datum/gear/exec_suit + display_name = "executive suit" + path = /obj/item/clothing/under/suit_jacket/really_black + slot = slot_w_uniform + cost = 3 + +//Security +/datum/gear/security + display_name = "Security HUD" + path = /obj/item/clothing/glasses/hud/security + cost = 3 + slot = slot_glasses + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/black_vest + display_name = "black webbing vest" + path = /obj/item/clothing/tie/storage/black_vest + cost = 3 + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/armpit + display_name = "shoulder holster" + path = /obj/item/clothing/tie/holster/armpit + cost = 3 + allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Head of Security") + +/datum/gear/sec_beret + display_name = "security beret" + path = /obj/item/clothing/head/beret/sec + cost = 1 + slot = slot_head + allowed_roles = list("Security Officer","Head of Security","Warden") + +//Engineering +/datum/gear/eng_beret + display_name = "engineering beret" + path = /obj/item/clothing/head/beret/eng + cost = 1 + slot = slot_head + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer") + +/datum/gear/brown_vest + display_name = "brown webbing vest" + path = /obj/item/clothing/tie/storage/brown_vest + cost = 3 + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer") + +/datum/gear/engineer_bandana + display_name = "engineering bandana" + path = /obj/item/clothing/head/helmet/greenbandana/fluff/taryn_kifer_1 + cost = 2 + slot = slot_head + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer") + +//Science +/datum/gear/scanning_goggles + display_name = "scanning goggles" + path = /obj/item/clothing/glasses/fluff/uzenwa_sissra_1 + cost = 2 + allowed_roles = list("Roboticist", "Scientist", "Research Director") + +//Species-specific gear datums. +/datum/gear/zhan_furs + display_name = "Zhan-Khazan furs" + path = /obj/item/clothing/suit/tajaran/furs + cost = 3 + slot = slot_wear_suit + whitelisted = "Tajaran" + +/datum/gear/zhan_scarf + display_name = "Zhan-Khazan headscarf" + path = /obj/item/clothing/head/tajaran/scarf + cost = 2 + slot = slot_head + whitelisted = "Tajaran" + +/datum/gear/unathi_robe + display_name = "roughspun robe" + path = /obj/item/clothing/suit/unathi/robe + cost = 3 + slot = slot_wear_suit + whitelisted = "Unathi" + +/datum/gear/unathi_mantle + display_name = "hide mantle" + path = /obj/item/clothing/suit/unathi/mantle + cost = 2 + slot = slot_wear_suit + whitelisted = "Unathi" diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 68bb5a9e3eb..ef3b8e5c035 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -155,6 +155,7 @@ S["skills"] >> skills S["skill_specialization"] >> skill_specialization S["organ_data"] >> organ_data + S["gear"] >> gear S["nanotrasen_relation"] >> nanotrasen_relation //S["skin_style"] >> skin_style @@ -211,6 +212,7 @@ if(isnull(disabilities)) disabilities = 0 if(!player_alt_titles) player_alt_titles = new() if(!organ_data) src.organ_data = list() + if(!gear) src.gear = list() //if(!skin_style) skin_style = "Default" return 1 @@ -248,6 +250,7 @@ S["undershirt"] << undershirt S["backbag"] << backbag S["b_type"] << b_type + S["spawnpoint"] << spawnpoint //Jobs S["alternate_option"] << alternate_option @@ -273,6 +276,7 @@ S["skills"] << skills S["skill_specialization"] << skill_specialization S["organ_data"] << organ_data + S["gear"] << gear S["nanotrasen_relation"] << nanotrasen_relation //S["skin_style"] << skin_style diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index d2ef8deccff..692cc90b637 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -3,7 +3,7 @@ /obj/item/clothing/head/chefhat name = "chef's hat" desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work." - icon_state = "chef" + icon_state = "chefhat" item_state = "chefhat" desc = "The commander in chef's head wear." flags = FPRINT | TABLEPASS diff --git a/code/modules/clothing/suits/alien.dm b/code/modules/clothing/suits/alien.dm index 5b664f21b35..539efcaacc9 100644 --- a/code/modules/clothing/suits/alien.dm +++ b/code/modules/clothing/suits/alien.dm @@ -12,4 +12,18 @@ desc = "A rather grisly selection of cured hides and skin, sewn together to form a ragged mantle." icon_state = "mantle-unathi" item_state = "mantle-unathi" - body_parts_covered = UPPER_TORSO \ No newline at end of file + body_parts_covered = UPPER_TORSO + +//Taj clothing. + +/obj/item/clothing/suit/tajaran/furs + name = "heavy furs" + desc = "A traditional Zhan-Khazan garment." + icon_state = "zhan_furs" + item_state = "zhan_furs" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + +/obj/item/clothing/head/tajaran/scarf + name = "headscarf" + desc = "A scarf of coarse fabric. Seems to have ear-holes." + icon_state = "zhan_scarf" \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c182d820246..3e4cf1a3d1b 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -294,13 +294,13 @@ /obj/item/clothing/under/dress/dress_cap - name = "captain dress uniform" + name = "captain's dress uniform" desc = "Feminine fashion for the style concious captain." icon_state = "dress_cap" item_color = "dress_cap" /obj/item/clothing/under/dress/dress_hop - name = "head of personal dress uniform" + name = "head of personnel dress uniform" desc = "Feminine fashion for the style concious HoP." icon_state = "dress_hop" item_color = "dress_hop" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 57cc66865b1..d8b1bdf70b0 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -22,7 +22,7 @@ has_suit = S loc = has_suit has_suit.overlays += inv_overlay - + user << "You attach [src] to [has_suit]." src.add_fingerprint(user) @@ -157,38 +157,38 @@ item_color = "red" /obj/item/clothing/tie/armband/cargo - name = "cargo bay guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is brown." + name = "cargo armband" + desc = "An armband, worn by the crew to display which department they're assigned to. This one is brown." icon_state = "cargo" item_color = "cargo" /obj/item/clothing/tie/armband/engine - name = "engineering guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is orange with a reflective strip!" + name = "engineering armband" + desc = "An armband, worn by the crew to display which department they're assigned to. This one is orange with a reflective strip!" icon_state = "engie" item_color = "engie" /obj/item/clothing/tie/armband/science - name = "science guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is purple." + name = "science armband" + desc = "An armband, worn by the crew to display which department they're assigned to. This one is purple." icon_state = "rnd" item_color = "rnd" /obj/item/clothing/tie/armband/hydro - name = "hydroponics guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is green and blue." + name = "hydroponics armband" + desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and blue." icon_state = "hydro" item_color = "hydro" /obj/item/clothing/tie/armband/med - name = "medical guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white." + name = "medical armband" + desc = "An armband, worn by the crew to display which department they're assigned to. This one is white." icon_state = "med" item_color = "med" /obj/item/clothing/tie/armband/medgreen - name = "medical guard armband" - desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and green." + name = "EMT armband" + desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green." icon_state = "medgreen" item_color = "medgreen" @@ -208,16 +208,16 @@ if(holstered) user << "\red There is already a [holstered] holstered here!" return - + if (!istype(I, /obj/item/weapon/gun)) user << "\red Only guns can be holstered!" return - + var/obj/item/weapon/gun/W = I if (!can_holster(W)) user << "\red This [W] won't fit in the [src]!" return - + holstered = W user.drop_from_inventory(holstered) holstered.loc = src @@ -227,7 +227,7 @@ /obj/item/clothing/tie/holster/proc/unholster(mob/user as mob) if(!holstered) return - + if(istype(user.get_active_hand(),/obj) && istype(user.get_inactive_hand(),/obj)) user << "\red You need an empty hand to draw the [holstered]!" else @@ -246,7 +246,7 @@ if (holstered) unholster(user) return - + ..(user) /obj/item/clothing/tie/holster/attackby(obj/item/W as obj, mob/user as mob) @@ -280,7 +280,7 @@ set src in usr if(!istype(usr, /mob/living)) return if(usr.stat) return - + var/obj/item/clothing/tie/holster/H = null if (istype(src, /obj/item/clothing/tie/holster)) H = src @@ -288,7 +288,7 @@ var/obj/item/clothing/under/S = src if (S.hastie) H = S.hastie - + if (!H) usr << "/red Something is very wrong." @@ -330,14 +330,14 @@ if (has_suit) //if we are part of a suit hold.open(user) return - + if (hold.handle_attack_hand(user)) //otherwise interact as a regular storage item ..(user) /obj/item/clothing/tie/storage/MouseDrop(obj/over_object as obj) if (has_suit) return - + if (hold.handle_mousedrop(usr, over_object)) ..(over_object) @@ -471,6 +471,6 @@ "/obj/item/weapon/kitchen/utensil/pknife",\ "/obj/item/weapon/kitchenknife",\ "/obj/item/weapon/kitchenknife/ritual") - + new /obj/item/weapon/hatchet/unathiknife(hold) new /obj/item/weapon/hatchet/unathiknife(hold) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index ea5bc55a39d..9c820db0260 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -492,37 +492,89 @@ new_icon = "earth" allowed_types = list("ripley","firefighter") -///////// Salvage crew hardsuit - Cybele Petit - solaruin /////////////// +// Root hardsuit kit defines. +// Icons for modified hardsuits need to be in the proper .dmis because suit cyclers may cock them up. +/obj/item/device/kit/suit/fluff -/obj/item/device/kit/fluff/salvage - name = "salvage hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit into a salvage hardsuit." + name = "hardsuit modification kit" + desc = "A kit for modifying a hardsuit." icon = 'icons/obj/custom_items.dmi' icon_state = "salvage_kit" + var/new_name // Modifier for new item name - '[new_name] hardsuit'. + var/new_helmet_desc // Sets helmet desc. + var/new_suit_desc // Sets suit desc. + var/helmet_icon // Sets helmet icon_state and item_state. + var/suit_icon // Sets suit icon_state and item_state. + var/helmet_color // Sets item_color. + var/uses = 2 // Uses before the kit deletes itself. + /obj/item/clothing/head/helmet/space/rig/attackby(var/obj/item/O as obj, mob/user as mob) ..() - if(istype(O,/obj/item/device/kit/fluff/salvage)) - name = "Salvage Hardsuit helmet" - desc = "An orange hardsuit helmet used by salvage flotillas. Has reinforced plating." - icon = 'icons/obj/custom_items.dmi' - icon_state = "salvage_helmet" - item_state = "salvage_helmet" + if(istype(O,/obj/item/device/kit/suit/fluff)) + + var/obj/item/device/kit/suit/fluff/kit = O + name = "[kit.new_name] hardsuit helmet" + desc = kit.new_helmet_desc + icon_state = kit.helmet_icon + item_state = kit.helmet_icon + item_color = kit.helmet_color + + user << "You set about modifying the helmet into [src]." + playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1) + + kit.uses-- + if(kit.uses<1) + user.drop_item() + del(O) /obj/item/clothing/suit/space/rig/attackby(var/obj/item/O as obj, mob/user as mob) ..() - if(istype(O,/obj/item/device/kit/fluff/salvage)) - name = "Salvage Hardsuit" - desc = "An orange hardsuit used by salvage flotillas. Has reinforced plating." - icon = 'icons/obj/custom_items.dmi' - icon_state = "salvage_suit" - item_state = "salvage_suit" + if(istype(O,/obj/item/device/kit/suit/fluff)) + + var/obj/item/device/kit/suit/fluff/kit = O + name = "[kit.new_name] hardsuit" + desc = kit.new_suit_desc + icon_state = kit.suit_icon + item_state = kit.suit_icon + + user << "You set about modifying the suit into [src]." + playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1) + + kit.uses-- + if(kit.uses<1) + user.drop_item() + del(O) + +///////// Salvage crew hardsuit - Cybele Petit - solaruin /////////////// +/obj/item/device/kit/suit/fluff/salvage + name = "salvage hardsuit modification kit" + desc = "A kit containing all the needed tools and parts to modify a hardsuit into a salvage hardsuit." + + new_name = "salvage" + new_suit_desc = "An orange hardsuit used by salvage flotillas. Has reinforced plating." + new_helmet_desc = "An orange hardsuit helmet used by salvage flotillas. Has reinforced plating." + helmet_icon = "salvage_helmet" + suit_icon = "salvage_suit" + helmet_color = "salvage" + +///////// Salvage crew hardsuit - Callum Leamas - roaper /////////////// +/obj/item/device/kit/suit/fluff/roaper + name = "Callum's hardsuit modification kit" + desc = "A kit containing all the needed tools and parts to modify a hardsuit." + + new_name = "weathered" + new_suit_desc = " A jury-rigged and modified engineering hardsuit. It looks slightly damaged and dinged." + new_helmet_desc = "A jury-rigged and modified engineering hardsuit helmet. It looks slightly damaged and dinged" + helmet_icon = "rig0-roaper" + suit_icon = "rig-roaper" + helmet_color = "roaper" //////// Meat Hook - Korom Bhararaya - Matthew951 //////////////////////// -/obj/item/device/kit/fluff/hook +/obj/item/device/kit/weapon/fluff/hook name = "hook modification kit" desc = "A kit containing all the needed tools and parts to modify a knife or a butcher's knife into a hook." icon = 'icons/obj/custom_items.dmi' @@ -531,7 +583,7 @@ /obj/item/weapon/kitchenknife/attackby(var/obj/item/O as obj, mob/user as mob) ..() - if(istype(O,/obj/item/device/kit/fluff/hook)) + if(istype(O,/obj/item/device/kit/weapon/fluff/hook)) name = "meat hook" desc = "A sharp, metal hook what sticks into things." icon = 'icons/obj/custom_items.dmi' @@ -541,7 +593,7 @@ /obj/item/weapon/butch/attackby(var/obj/item/O as obj, mob/user as mob) ..() - if(istype(O,/obj/item/device/kit/fluff/hook)) + if(istype(O,/obj/item/device/kit/weapon/fluff/hook)) name = "meat hook" desc = "A sharp, metal hook what sticks into things." icon = 'icons/obj/custom_items.dmi' diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 0542d0b6320..95183949160 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -13,7 +13,7 @@ I said no! /datum/recipe/syntitelebacon items = list( - /obj/item/weapon/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, /obj/item/device/assembly/signaler ) result = /obj/item/weapon/reagent_containers/food/snacks/telebacon @@ -128,7 +128,7 @@ I said no! /datum/recipe/syntiburger items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/syntiflesh + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh ) result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger @@ -252,9 +252,9 @@ I said no! /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/syntiflesh, - /obj/item/weapon/syntiflesh, - /obj/item/weapon/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, @@ -437,8 +437,8 @@ I said no! /datum/recipe/syntikabob items = list( /obj/item/stack/rods, - /obj/item/weapon/syntiflesh, - /obj/item/weapon/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, ) result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob @@ -533,7 +533,7 @@ I said no! /datum/recipe/syntisteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/weapon/syntiflesh + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh ) result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak @@ -562,9 +562,9 @@ I said no! /datum/recipe/syntipizza items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/syntiflesh, - /obj/item/weapon/syntiflesh, - /obj/item/weapon/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, ) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index d7ee4611611..60adf1e7046 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -116,7 +116,7 @@ H.concealed = 1 H.update_icon() usr.visible_message("\The [usr] deals a card to \the [M].") - H.throw_at(get_step(M,M.dir),10,1) + H.throw_at(get_step(M,M.dir),10,1,H) /obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) if(istype(O,/obj/item/weapon/hand)) diff --git a/code/modules/mining/drilling/distribution.dm b/code/modules/mining/drilling/distribution.dm index 72a288a8c3c..bf32d417cd0 100644 --- a/code/modules/mining/drilling/distribution.dm +++ b/code/modules/mining/drilling/distribution.dm @@ -75,9 +75,6 @@ Deep minerals: //Halfassed diamond-square algorithm with some fuckery since it's a single dimension array. /datum/ore_distribution/proc/populate_distribution_map() - //Announce it! - world << "Generating resource distribution map." - //Seed beginning values. var/x = 1 var/y = 1 diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index d350e2052cb..d8b671af252 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -142,10 +142,20 @@ /obj/machinery/mineral/processing_unit/process() - if (!active || !src.output || !src.input) return + if (!src.output || !src.input) return var/list/tick_alloys = list() + //Grab some more ore to process this tick. + for(var/i = 0,i 0 && findtext(message,"\"",1, null) > 0) + // return //This check does not work and I have no idea why, I'm leaving it in for reference. + if (src.client) if (client.prefs.muted & MUTE_IC) src << "\red You cannot send IC messages (muted)." diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index af74fd2853c..85800991241 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1383,7 +1383,7 @@ status_flags |= LEAPING src.visible_message("\The [src] leaps at [T]!") - src.throw_at(get_step(get_turf(T),get_turf(src)), 5, 1) + src.throw_at(get_step(get_turf(T),get_turf(src)), 5, 1, src) playsound(src.loc, 'sound/voice/shriek1.ogg', 50, 1) sleep(5) @@ -1457,3 +1457,39 @@ M.apply_damage(50,BRUTE) if(M.stat == 2) M.gib() + +/mob/living/carbon/human/proc/commune() + set category = "IC" + set name = "Commune with creature" + set desc = "Send a telepathic message to an unlucky recipient." + + var/list/targets = list() + var/target = null + var/text = null + + targets += getmobs() //Fill list, prompt user with list + target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets + + if(!target) return + + text = input("What would you like to say?", "Speak to creature", null, null) + + text = trim(copytext(sanitize(text), 1, MAX_MESSAGE_LEN)) + + if(!text) return + + var/mob/M = targets[target] + + if(istype(M, /mob/dead/observer) || M.stat == DEAD) + src << "Not even a [src.species.name] can speak to the dead." + return + + log_say("[key_name(src)] communed to [key_name(M)]: [text]") + + M << "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]" + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.name == src.species.name) + return + H << "\red Your nose begins to bleed..." + H.drip(1) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index c39fe115ace..bacef8541bc 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -136,7 +136,7 @@ //Rearranged, so claws don't increase weaken chance. if(damage >= 5 && prob(50)) visible_message("\red [M] has weakened [src]!") - apply_effect(2, WEAKEN, armor_block) + apply_effect(3, WEAKEN, armor_block) damage += attack.damage apply_damage(damage, BRUTE, affecting, armor_block, sharp=attack.sharp, edge=attack.edge) @@ -174,7 +174,7 @@ var/randn = rand(1, 100) if (randn <= 25) - apply_effect(4, WEAKEN, run_armor_check(affecting, "melee")) + apply_effect(3, WEAKEN, run_armor_check(affecting, "melee")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("\red [M] has pushed [src]!") return diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index dbf8379eeb5..570e141c651 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -307,7 +307,8 @@ This function restores all organs. var/embed_threshold = sharp? 5*W.w_class : 15*W.w_class //Sharp objects will always embed if they do enough damage. - if((sharp && damage > (10*W.w_class)) || (sharp && !ismob(W.loc)) || (damage > embed_threshold && prob(embed_chance))) + //Thrown objects have some momentum already and have a small chance to embed even if the damage is below the threshold + if((sharp && damage > (10*W.w_class)) || (sharp && !ismob(W.loc) && prob(damage/(10*W.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) organ.embed(W) return 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 06783d6d514..6260a297a1c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -275,13 +275,84 @@ emp_act if("chest")//Easier to score a stun but lasts less time if(prob((I.force + 10))) - apply_effect(5, WEAKEN, armor) + apply_effect(6, WEAKEN, armor) visible_message("\red [src] has been knocked down!") if(bloody) bloody_body(src) return 1 +//this proc handles being hit by a thrown atom +/mob/living/carbon/human/hitby(atom/movable/AM as mob|obj,var/speed = 5) + if(istype(AM,/obj/)) + var/obj/O = AM + var/dtype = BRUTE + if(istype(O,/obj/item/weapon)) + var/obj/item/weapon/W = O + dtype = W.damtype + var/throw_damage = O.throwforce*(speed/5) + + var/zone + if (istype(O.thrower, /mob/living)) + var/mob/living/L = O.thrower + zone = check_zone(L.zone_sel.selecting) + else + zone = ran_zone("chest",75) //Hits a random part of the body, geared towards the chest + + //check if we hit + if (O.throw_source) + var/distance = get_dist(O.throw_source, loc) + zone = get_zone_with_miss_chance(zone, src, min(15*(distance-2), 0)) + else + zone = get_zone_with_miss_chance(zone, src, 15) + + if(!zone) + visible_message("\blue \The [O] misses [src] narrowly!") + return + + O.throwing = 0 //it hit, so stop moving + + if ((O.thrower != src) && check_shields(throw_damage, "[O]")) + return + + var/datum/organ/external/affecting = get_organ(zone) + var/hit_area = affecting.display_name + + src.visible_message("\red [src] has been hit in the [hit_area] by [O].") + var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here + + if(armor < 2) + apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O) + + if(ismob(O.thrower)) + var/mob/M = O.thrower + var/client/assailant = M.client + if(assailant) + src.attack_log += text("\[[time_stamp()]\] Has been hit with a [O], thrown by [M.name] ([assailant.ckey])") + M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with a thrown [O]") + if(!istype(src,/mob/living/simple_animal/mouse)) + msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (JMP)") + + // Begin BS12 momentum-transfer code. + if(O.throw_source && speed >= 15) + var/obj/item/weapon/W = O + var/momentum = speed/2 + var/dir = get_dir(O.throw_source, src) + + visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!") + src.throw_at(get_edge_target_turf(src,dir),1,momentum) + + if(!W || !src) return + + if(W.loc == src && W.sharp) //Projectile is embedded and suitable for pinning. + var/turf/T = near_wall(dir,2) + + if(T) + src.loc = T + visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") + src.anchored = 1 + src.pinned += O + /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) if (gloves) gloves.add_blood(source) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5280d92de74..41a3125c183 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -690,6 +690,7 @@ loc_temp = environment.temperature if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1 && environment.phoron < MOLES_PHORON_VISIBLE) + pressure_alert = 0 return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp //Body temperature adjusts depending on surrounding atmosphere based on your thermal protection @@ -1098,6 +1099,9 @@ return //TODO: DEFERRED proc/handle_regular_status_updates() + + if(status_flags & GODMODE) return 0 + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP blinded = 1 silent = 0 diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 4413390538c..59c02ab2f7e 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -214,6 +214,7 @@ /datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H) H.verbs += /mob/living/carbon/human/proc/gut + H.verbs += /mob/living/carbon/human/proc/commune ..() /datum/species/vox/armalis diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 0b7be481536..8b9bfccb879 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -65,58 +65,69 @@ P.on_hit(src, absorb, def_zone) return absorb +//this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve if(istype(AM,/obj/)) var/obj/O = AM - var/zone = ran_zone("chest",75)//Hits a random part of the body, geared towards the chest var/dtype = BRUTE if(istype(O,/obj/item/weapon)) var/obj/item/weapon/W = O dtype = W.damtype + var/throw_damage = O.throwforce*(speed/5) + + var/miss_chance = 15 + if (O.throw_source) + var/distance = get_dist(O.throw_source, loc) + miss_chance = min(15*(distance-2), 0) + + if (prob(miss_chance)) + visible_message("\blue \The [O] misses [src] narrowly!") + return + src.visible_message("\red [src] has been hit by [O].") - var/armor = run_armor_check(zone, "melee", "Your armor has protected your [zone].", "Your armor has softened hit to your [zone].") + var/armor = run_armor_check(null, "melee") if(armor < 2) - apply_damage(O.throwforce*(speed/5), dtype, zone, armor, is_sharp(O), has_edge(O), O) + apply_damage(throw_damage, dtype, null, armor, is_sharp(O), has_edge(O), O) - if(!O.fingerprintslast) - return + O.throwing = 0 //it hit, so stop moving + + if(ismob(O.thrower)) + var/mob/M = O.thrower + var/client/assailant = M.client + if(assailant) + src.attack_log += text("\[[time_stamp()]\] Has been hit with a [O], thrown by [M.name] ([assailant.ckey])") + M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with a thrown [O]") + if(!istype(src,/mob/living/simple_animal/mouse)) + msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (JMP)") - var/client/assailant = directory[ckey(O.fingerprintslast)] - if(assailant && assailant.mob && istype(assailant.mob,/mob)) - var/mob/M = assailant.mob + // Begin BS12 momentum-transfer code. + if(O.throw_source && speed >= 15) + var/obj/item/weapon/W = O + var/momentum = speed/2 + var/dir = get_dir(O.throw_source, src) - src.attack_log += text("\[[time_stamp()]\] Has been hit with a thrown [O], last touched by [M.name] ([assailant.ckey])") - M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with a thrown [O]") - if(!istype(src,/mob/living/simple_animal/mouse)) - msg_admin_attack("[src.name] ([src.ckey]) was hit by a thrown [O], last touched by [M.name] ([assailant.ckey]) (JMP)") + visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!") + src.throw_at(get_edge_target_turf(src,dir),1,momentum) - // Begin BS12 momentum-transfer code. + if(!W || !src) return + + if(W.sharp) //Projectile is suitable for pinning. + //Handles embedding for non-humans and simple_animals. + O.loc = src + src.embedded += O - if(speed >= 15) - var/obj/item/weapon/W = O - var/momentum = speed/2 - var/dir = get_dir(M,src) + var/turf/T = near_wall(dir,2) - visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!") - src.throw_at(get_edge_target_turf(src,dir),1,momentum) - - if(!W || !src) return - - if(istype(W.loc,/mob/living) && W.sharp) //Projectile is embedded and suitable for pinning. - - if(!istype(src,/mob/living/carbon/human)) //Handles embedding for non-humans and simple_animals. - O.loc = src - src.embedded += O - - var/turf/T = near_wall(dir,2) - - if(T) - src.loc = T - visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") - src.anchored = 1 - src.pinned += O + if(T) + src.loc = T + visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") + src.anchored = 1 + src.pinned += O +//This is called when the mob is thrown into a dense turf +/mob/living/proc/turf_collision(var/turf/T, var/speed) + src.take_organ_damage(speed*5) /mob/living/proc/near_wall(var/direction,var/distance=1) var/turf/T = get_step(get_turf(src),direction) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4fd99b42931..3344a9e2101 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -1,4 +1,3 @@ -#define SAY_MINIMUM_PRESSURE 10 var/list/department_radio_keys = list( ":r" = "right ear", "#r" = "right ear", ".r" = "right ear", ":l" = "left ear", "#l" = "left ear", ".l" = "left ear", @@ -112,7 +111,7 @@ var/list/department_radio_keys = list( var/datum/gas_mixture/environment = T.return_air() if(environment) var/pressure = environment.return_pressure() - if(pressure < SAY_MINIMUM_PRESSURE) + if(pressure < SOUND_MINIMUM_PRESSURE) italics = 1 message_range = 1 diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index 32e0c8d3460..a95a754eae8 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,4 +1,5 @@ /mob/living/silicon/Login() + sleeping = 0 if(mind && ticker && ticker.mode) ticker.mode.remove_cultist(mind, 1) ticker.mode.remove_revolutionary(mind, 1) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 7c2dc565a4e..dfe1a9db29e 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -28,6 +28,19 @@ //Item currently being held. var/obj/item/wrapped = null +/obj/item/weapon/gripper/paperwork + name = "paperwork gripper" + desc = "A simple grasping tool for clerical work." + icon = 'icons/obj/device.dmi' + icon_state = "gripper" + + can_hold = list( + /obj/item/weapon/clipboard, + /obj/item/weapon/paper, + /obj/item/weapon/paper_bundle, + /obj/item/weapon/card/id + ) + /obj/item/weapon/gripper/attack_self(mob/user as mob) if(wrapped) wrapped.attack_self(user) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1d0dd77e284..8d1823f0c51 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -5,7 +5,7 @@ icon_state = "robot" maxHealth = 200 health = 200 - + var/sight_mode = 0 var/custom_name = "" var/custom_sprite = 0 //Due to all the sprites involved, a var for our custom borgs may be best @@ -163,7 +163,7 @@ /mob/living/silicon/robot/proc/pick_module() if(module) return - var/list/modules = list("Standard", "Engineering", "Medical", "Miner", "Janitor", "Service", "Security") + var/list/modules = list("Standard", "Engineering", "Construction", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security") if(crisis && security_level == SEC_LEVEL_RED) //Leaving this in until it's balanced appropriately. src << "\red Crisis mode active. Combat module available." modules+="Combat" @@ -189,6 +189,14 @@ module_sprites["Rich"] = "maximillion" module_sprites["Default"] = "Service2" + if("Clerical") + module = new /obj/item/weapon/robot_module/clerical(src) + module_sprites["Waitress"] = "Service" + module_sprites["Kent"] = "toiletbot" + module_sprites["Bro"] = "Brobot" + module_sprites["Rich"] = "maximillion" + module_sprites["Default"] = "Service2" + if("Miner") module = new /obj/item/weapon/robot_module/miner(src) module.channels = list("Supply" = 1) @@ -198,15 +206,26 @@ module_sprites["Advanced Droid"] = "droid-miner" module_sprites["Treadhead"] = "Miner" - if("Medical") - module = new /obj/item/weapon/robot_module/medical(src) + if("Crisis") + module = new /obj/item/weapon/robot_module/crisis(src) module.channels = list("Medical" = 1) if(camera && "Robots" in camera.network) camera.network.Add("Medical") module_sprites["Basic"] = "Medbot" + module_sprites["Standard"] = "surgeon" module_sprites["Advanced Droid"] = "droid-medical" module_sprites["Needles"] = "medicalrobot" + + if("Surgeon") + module = new /obj/item/weapon/robot_module/surgeon(src) + module.channels = list("Medical" = 1) + if(camera && "Robots" in camera.network) + camera.network.Add("Medical") + + module_sprites["Basic"] = "Medbot" module_sprites["Standard"] = "surgeon" + module_sprites["Advanced Droid"] = "droid-medical" + module_sprites["Needles"] = "medicalrobot" if("Security") module = new /obj/item/weapon/robot_module/security(src) @@ -225,6 +244,15 @@ module_sprites["Antique"] = "engineerrobot" module_sprites["Landmate"] = "landmate" + if("Construction") + module = new /obj/item/weapon/robot_module/construction(src) + module.channels = list("Engineering" = 1) + if(camera && "Robots" in camera.network) + camera.network.Add("Engineering") + module_sprites["Basic"] = "Engineering" + module_sprites["Antique"] = "engineerrobot" + module_sprites["Landmate"] = "landmate" + if("Janitor") module = new /obj/item/weapon/robot_module/janitor(src) module_sprites["Basic"] = "JanBot2" @@ -238,7 +266,7 @@ //languages module.add_languages(src) - + //Custom_sprite check and entry if (custom_sprite == 1) module_sprites["Custom"] = "[src.ckey]-[modtype]" diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 1c24a5e75dd..931cb0556be 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -95,14 +95,26 @@ var/mode = 1 /obj/item/weapon/pen/robopen/attack_self(mob/user as mob) + + var/choice = input("Would you like to change colour or mode?") as null|anything in list("Colour","Mode") + if(!choice) return + playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - if (mode == 1) - mode = 2 - user << "Changed printing mode to 'Rename Paper'" - return - if (mode == 2) - mode = 1 - user << "Changed printing mode to 'Write Paper'" + + switch(choice) + + if("Colour") + var/newcolour = input("Which colour would you like to use?") as null|anything in list("black","blue","red","green","yellow") + if(newcolour) colour = newcolour + + if("Mode") + if (mode == 1) + mode = 2 + else + mode = 1 + user << "Changed printing mode to '[mode == 2 ? "Rename Paper" : "Write Paper"]'" + + return // Copied over from paper's rename verb // see code\modules\paperwork\paper.dm line 62 @@ -120,6 +132,33 @@ add_fingerprint(user) return +//TODO: Add prewritten forms to dispense when you work out a good way to store the strings. +/obj/item/weapon/form_printer + //name = "paperwork printer" + name = "paper dispenser" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "paper_bin1" + item_state = "sheet-metal" + +/obj/item/weapon/form_printer/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + return + +/obj/item/weapon/form_printer/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) + + if(!target || !flag) + return + + if(istype(target,/obj/structure/table)) + deploy_paper(get_turf(target)) + +/obj/item/weapon/form_printer/attack_self(mob/user as mob) + deploy_paper(get_turf(src)) + +/obj/item/weapon/form_printer/proc/deploy_paper(var/turf/T) + T.visible_message("\blue \The [src.loc] dispenses a sheet of crisp white paper.") + new /obj/item/weapon/paper(T) + + //Personal shielding for the combat module. /obj/item/borg/combat/shield name = "personal shielding" diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 728c6d2b79a..d0d744b0a48 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -9,6 +9,7 @@ var/list/modules = list() var/obj/item/emag = null var/obj/item/borg/upgrade/jetpack = null + var/list/stacktypes emp_act(severity) if(modules) @@ -31,7 +32,21 @@ /obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R) - return + + if(!stacktypes || !stacktypes.len) return + + for(var/T in stacktypes) + var/O = locate(T) in src.modules + var/obj/item/stack/S = O + + if(!S) + src.modules -= null + S = new T(src) + src.modules += S + S.amount = 1 + + if(S && S.amount < stacktypes[T]) + S.amount++ /obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module var/list/temp_list = modules @@ -42,21 +57,22 @@ /obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R) //full set of languages - R.add_language("Sol Common", 0) + R.add_language("Sol Common", 1) + R.add_language("Tradeband", 1) R.add_language("Sinta'unathi", 0) R.add_language("Siik'maas", 0) R.add_language("Siik'tajr", 0) R.add_language("Skrellian", 0) - R.add_language("Tradeband", 0) R.add_language("Gutter", 0) + /obj/item/weapon/robot_module/standard name = "standard robot module" New() src.modules += new /obj/item/device/flashlight(src) src.modules += new /obj/item/device/flash(src) - src.modules += new /obj/item/weapon/melee/baton(src) + src.modules += new /obj/item/weapon/melee/baton/loaded(src) src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/crowbar(src) @@ -64,13 +80,49 @@ src.emag = new /obj/item/weapon/melee/energy/sword(src) return -/obj/item/weapon/robot_module/standard/respawn_consumable(var/mob/living/silicon/robot/R) - var/obj/item/weapon/melee/baton/B = locate() in src.modules - if(B.charges < 10) - B.charges += 1 +/obj/item/weapon/robot_module/surgeon + name = "surgeon robot module" + stacktypes = list( + /obj/item/stack/medical/advanced/bruise_pack = 5, + /obj/item/stack/nanopaste = 5 + ) -/obj/item/weapon/robot_module/medical - name = "medical robot module" + New() + src.modules += new /obj/item/device/flashlight(src) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src) + src.modules += new /obj/item/weapon/scalpel(src) + src.modules += new /obj/item/weapon/hemostat(src) + src.modules += new /obj/item/weapon/retractor(src) + src.modules += new /obj/item/weapon/cautery(src) + src.modules += new /obj/item/weapon/bonegel(src) + src.modules += new /obj/item/weapon/bonesetter(src) + src.modules += new /obj/item/weapon/circular_saw(src) + src.modules += new /obj/item/weapon/surgicaldrill(src) + src.modules += new /obj/item/weapon/extinguisher/mini(src) + src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src) + src.modules += new /obj/item/stack/nanopaste(src) + + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + return + +/obj/item/weapon/robot_module/surgeon/respawn_consumable(var/mob/living/silicon/robot/R) + if(src.emag) + var/obj/item/weapon/reagent_containers/spray/PS = src.emag + PS.reagents.add_reagent("pacid", 2) + ..() + +/obj/item/weapon/robot_module/crisis + name = "crisis robot module" + stacktypes = list( + /obj/item/stack/medical/ointment = 5, + /obj/item/stack/medical/bruise_pack = 5, + /obj/item/stack/medical/splint = 5 + ) New() src.modules += new /obj/item/device/flashlight(src) @@ -78,40 +130,74 @@ src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/reagent_scanner/adv(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo(src) + src.modules += new /obj/item/roller_holder(src) + src.modules += new /obj/item/stack/medical/ointment(src) + src.modules += new /obj/item/stack/medical/bruise_pack(src) + src.modules += new /obj/item/stack/medical/splint(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src) src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) src.modules += new /obj/item/weapon/reagent_containers/syringe(src) src.modules += new /obj/item/weapon/extinguisher/mini(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("pacid", 250) src.emag.name = "Polyacid spray" return -/obj/item/weapon/robot_module/medical/respawn_consumable(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/crisis/respawn_consumable(var/mob/living/silicon/robot/R) + var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules - if(S.mode == 2)//SYRINGE_BROKEN + if(S.mode == 2) S.reagents.clear_reagents() S.mode = initial(S.mode) S.desc = initial(S.desc) S.update_icon() + if(src.emag) var/obj/item/weapon/reagent_containers/spray/PS = src.emag PS.reagents.add_reagent("pacid", 2) -/obj/item/weapon/robot_module/engineering - name = "engineering robot module" + ..() +/obj/item/weapon/robot_module/construction + name = "construction robot module" + + stacktypes = list( + /obj/item/stack/sheet/metal = 50, + /obj/item/stack/sheet/plasteel = 10, + /obj/item/stack/sheet/rglass = 50 + ) + + New() + src.modules += new /obj/item/device/flashlight(src) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/borg/sight/meson(src) + src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/weapon/rcd/borg(src) + src.modules += new /obj/item/weapon/screwdriver(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) + +/obj/item/weapon/robot_module/engineering + name = "engineering robot module" + + stacktypes = list( + /obj/item/stack/sheet/metal = 50, + /obj/item/stack/sheet/glass = 50, + /obj/item/stack/sheet/rglass = 50, + /obj/item/weapon/cable_coil = 50, + /obj/item/stack/rods = 15, + /obj/item/stack/tile/plasteel = 15 + ) New() src.modules += new /obj/item/device/flashlight(src) src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/meson(src) - src.emag = new /obj/item/borg/stun(src) - src.modules += new /obj/item/weapon/rcd/borg(src) src.modules += new /obj/item/weapon/extinguisher(src) -// src.modules += new /obj/item/device/flashlight(src) src.modules += new /obj/item/weapon/weldingtool/largetank(src) src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) @@ -121,12 +207,20 @@ src.modules += new /obj/item/device/t_scanner(src) src.modules += new /obj/item/device/analyzer(src) src.modules += new /obj/item/taperoll/engineering(src) + src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/weapon/matter_decompiler(src) + + src.emag = new /obj/item/borg/stun(src) var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src) M.amount = 50 src.modules += M - var/obj/item/stack/sheet/rglass/cyborg/G = new /obj/item/stack/sheet/rglass/cyborg(src) + var/obj/item/stack/sheet/rglass/cyborg/R = new /obj/item/stack/sheet/rglass/cyborg(src) + R.amount = 50 + src.modules += R + + var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src) G.amount = 50 src.modules += G @@ -136,24 +230,6 @@ return -/obj/item/weapon/robot_module/engineering/respawn_consumable(var/mob/living/silicon/robot/R) - var/list/stacks = list ( - /obj/item/stack/sheet/metal, - /obj/item/stack/sheet/rglass, - /obj/item/weapon/cable_coil, - ) - for(var/T in stacks) - var/O = locate(T) in src.modules - if(O) - if(O:amount < 50) - O:amount++ - else - src.modules -= null - O = new T(src) - src.modules += O - O:amount = 1 - return - /obj/item/weapon/robot_module/security name = "security robot module" @@ -162,7 +238,7 @@ src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/melee/baton(src) + src.modules += new /obj/item/weapon/melee/baton/loaded(src) src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) src.modules += new /obj/item/taperoll/police(src) src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) @@ -182,9 +258,6 @@ T.update_icon() else T.charge_tick = 0 - var/obj/item/weapon/melee/baton/B = locate() in src.modules - if(B.charges < 10) - B.charges += 1 /obj/item/weapon/robot_module/janitor name = "janitorial robot module" @@ -217,7 +290,6 @@ src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) - src.modules += new /obj/item/weapon/pen/robopen(src) var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) M.matter = 30 @@ -251,6 +323,28 @@ R.add_language("Tradeband", 1) R.add_language("Gutter", 1) +/obj/item/weapon/robot_module/clerical + name = "clerical robot module" + + New() + src.modules += new /obj/item/device/flashlight(src) + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/pen/robopen(src) + src.modules += new /obj/item/weapon/form_printer(src) + src.modules += new /obj/item/weapon/gripper/paperwork(src) + + src.emag = new /obj/item/weapon/stamp/denied(src) + + add_languages(var/mob/living/silicon/robot/R) + R.add_language("Sol Common", 1) + R.add_language("Sinta'unathi", 1) + R.add_language("Siik'maas", 1) + R.add_language("Siik'tajr", 0) + R.add_language("Skrellian", 1) + R.add_language("Rootspeak", 1) + R.add_language("Tradeband", 1) + R.add_language("Gutter", 1) + /obj/item/weapon/robot_module/butler/respawn_consumable(var/mob/living/silicon/robot/R) var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules E.reagents.add_reagent("enzyme", 2) @@ -265,11 +359,12 @@ src.modules += new /obj/item/device/flashlight(src) src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/meson(src) - src.emag = new /obj/item/borg/stun(src) + src.modules += new /obj/item/weapon/wrench(src) + src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/storage/bag/ore(src) src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) -// src.modules += new /obj/item/weapon/shovel(src) Uneeded due to buffed drill + src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) return /obj/item/weapon/robot_module/syndicate @@ -301,7 +396,7 @@ /obj/item/weapon/robot_module/drone name = "drone module" - var/list/stacktypes = list( + stacktypes = list( /obj/item/stack/sheet/wood/cyborg = 1, /obj/item/stack/sheet/mineral/plastic/cyborg = 1, /obj/item/stack/sheet/rglass/cyborg = 5, @@ -342,29 +437,17 @@ var/obj/item/weapon/reagent_containers/spray/cleaner/C = locate() in src.modules C.reagents.add_reagent("cleaner", 3) - for(var/T in stacktypes) - var/O = locate(T) in src.modules - var/obj/item/stack/sheet/S = O - - if(!S) - src.modules -= null - S = new T(src) - src.modules += S - S.amount = 1 - - if(S && S.amount < stacktypes[T]) - S.amount++ - var/obj/item/device/lightreplacer/LR = locate() in src.modules LR.Charge(R) + ..() return //checks whether this item is a module of the robot it is located in. /obj/item/proc/is_robot_module() if (!istype(src.loc, /mob/living/silicon/robot)) return 0 - + var/mob/living/silicon/robot/R = src.loc - - return (src in R.module.modules) \ No newline at end of file + + return (src in R.module.modules) diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index f1a62754b4b..c3b7d43c05c 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -1,3 +1,8 @@ +/mob/living/silicon/robot/Process_Spaceslipping(var/prob_slip) + if(module && (istype(module,/obj/item/weapon/robot_module/construction) || istype(module,/obj/item/weapon/robot_module/drone))) + return 0 + ..(prob_slip) + /mob/living/silicon/robot/Process_Spacemove() if(module) for(var/obj/item/weapon/tank/jetpack/J in module.modules) diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm deleted file mode 100644 index f3354ce8561..00000000000 --- a/code/modules/mob/living/simple_animal/vox.dm +++ /dev/null @@ -1,160 +0,0 @@ -/mob/living/simple_animal/vox/armalis/ - - name = "serpentine alien" - real_name = "serpentine alien" - desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!" - icon = 'icons/mob/vox.dmi' - icon_state = "armalis" - icon_living = "armalis" - maxHealth = 500 - health = 500 - response_harm = "slashes at the" - harm_intent_damage = 0 - melee_damage_lower = 30 - melee_damage_upper = 40 - attacktext = "slammed its enormous claws into" - speed = -1 - wall_smash = 1 - attack_sound = 'sound/weapons/bladeslice.ogg' - status_flags = 0 - universal_speak = 1 - - var/armour = null - var/amp = null - var/quills = 3 - -/mob/living/simple_animal/vox/armalis/Die() - - living_mob_list -= src - dead_mob_list += src - stat = DEAD - visible_message("\red [src] shudders violently and explodes!","\red You feel your body rupture!") - explosion(get_turf(loc), -1, -1, 3, 5) - src.gib() - return - -/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(O.force) - if(O.force >= 25) - var/damage = O.force - if (O.damtype == HALLOSS) - damage = 0 - health -= damage - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") - -/mob/living/simple_animal/vox/armalis/verb/fire_quill(mob/target as mob in oview()) - - set name = "Fire quill" - set desc = "Fires a viciously pointed quill at a high speed." - set category = "Alien" - - if(quills<=0) - return - - src << "\red You launch a razor-sharp quill at [target]!" - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - O << "\red [src] launches a razor-sharp quill at [target]!" - - var/obj/item/weapon/arrow/quill/Q = new(loc) - Q.fingerprintslast = src.ckey - Q.throw_at(target,10,30) - quills-- - - spawn(100) - src << "\red You feel a fresh quill slide into place." - quills++ - -/mob/living/simple_animal/vox/armalis/verb/message_mob() - set category = "Alien" - set name = "Commune with creature" - set desc = "Send a telepathic message to an unlucky recipient." - - var/list/targets = list() - var/target = null - var/text = null - - targets += getmobs() //Fill list, prompt user with list - target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets - text = input("What would you like to say?", "Speak to creature", null, null) - - if (!target || !text) - return - - var/mob/M = targets[target] - - if(istype(M, /mob/dead/observer) || M.stat == DEAD) - src << "Not even the armalis can speak to the dead." - return - - M << "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]" - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.species.name == "Vox") - return - H << "\red Your nose begins to bleed..." - H.drip(1) - -/mob/living/simple_animal/vox/armalis/verb/shriek() - set category = "Alien" - set name = "Shriek" - set desc = "Give voice to a psychic shriek." - -/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O,/obj/item/vox/armalis_armour)) - user.drop_item() - armour = O - speed = 1 - maxHealth += 200 - health += 200 - O.loc = src - visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") - regenerate_icons() - return - if(istype(O,/obj/item/vox/armalis_amp)) - user.drop_item() - amp = O - O.loc = src - visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") - regenerate_icons() - return - return ..() - -/mob/living/simple_animal/vox/armalis/regenerate_icons() - - overlays = list() - if(armour) - var/icon/armour = image('icons/mob/vox.dmi',"armour") - speed = 1 - overlays += armour - if(amp) - var/icon/amp = image('icons/mob/vox.dmi',"amplifier") - overlays += amp - return - -/obj/item/vox/armalis_armour - - name = "strange armour" - desc = "Hulking reinforced armour for something huge." - icon = 'icons/obj/clothing/suits.dmi' - icon_state = "armalis_armour" - item_state = "armalis_armour" - -/obj/item/vox/armalis_amp - - name = "strange lenses" - desc = "A series of metallic lenses and chains." - icon = 'icons/obj/clothing/hats.dmi' - icon_state = "amp" - item_state = "amp" \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d12a6df2386..4c39c683b89 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -989,10 +989,11 @@ mob/proc/yank_out_object() affected = organ affected.implants -= selection - H.shock_stage+=10 + H.shock_stage+=20 H.bloody_hands(S) + affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction") - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + if(prob(selection.w_class * 5)) //I'M SO ANEMIC I COULD JUST -DIE-. var/datum/wound/internal_bleeding/I = new (15) affected.wounds += I H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index f6a61887944..333363bacf9 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -147,7 +147,11 @@ proc/hasorgans(A) */ return zone - +// Returns zone with a certain probability. +// If the probability misses, returns "chest" instead. +// If "chest" was passed in as zone, then on a "miss" will return "head", "l_arm", or "r_arm" +// Do not use this if someone is intentionally trying to hit a specific body part. +// Use get_zone_with_miss_chance() for that. /proc/ran_zone(zone, probability) zone = check_zone(zone) if(!probability) probability = 90 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index ce5e8824de3..9310155160b 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -249,6 +249,10 @@ if(istype(mob.buckled, /obj/vehicle)) return mob.buckled.relaymove(mob,direct) + if(istype(mob.machine, /obj/machinery)) + if(mob.machine.relaymove(mob,direct)) + return + if(mob.pulledby || mob.buckled) // Wheelchair driving! if(istype(mob.loc, /turf/space)) return // No wheelchair driving in space diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index b4d3f021962..0f18e02cf38 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -134,6 +134,7 @@ return 1 if(href_list["late_join"]) + if(!ticker || ticker.current_state != GAME_STATE_PLAYING) usr << "\red The round is either not ready, or has already finished..." return @@ -143,6 +144,11 @@ src << alert("You are currently not whitelisted to play [client.prefs.species].") return 0 + var/datum/species/S = all_species[client.prefs.species] + if(!(S.flags & IS_WHITELISTED)) + src << alert("Your current species,[client.prefs.species], is not available for play on the station.") + return 0 + LateChoices() if(href_list["manifest"]) @@ -159,6 +165,11 @@ src << alert("You are currently not whitelisted to play [client.prefs.species].") return 0 + var/datum/species/S = all_species[client.prefs.species] + if(!(S.flags & IS_WHITELISTED)) + src << alert("Your current species,[client.prefs.species], is not available for play on the station.") + return 0 + AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) return diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index ae938a9a8a4..a10965a4489 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -5,13 +5,30 @@ var/open_uis[0] // a list of current open /nanoui UIs, not grouped, for use in processing var/list/processing_uis = list() + // a list of asset filenames which are to be sent to the client on user logon + var/list/asset_files = list() /** * Create a new nanomanager instance. + * This proc generates a list of assets which are to be sent to each client on connect * * @return /nanomanager new nanomanager object */ /datum/nanomanager/New() + var/list/nano_asset_dirs = list(\ + "nano/css/",\ + "nano/images/",\ + "nano/js/",\ + "nano/templates/"\ + ) + + var/list/filenames = null + for (var/path in nano_asset_dirs) + filenames = flist(path) + for(var/filename in filenames) + if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore + asset_files.Add(file(path + filename)) // add this file to asset_files for sending to clients when they connect + return /** @@ -208,17 +225,6 @@ */ /datum/nanomanager/proc/send_resources(client) - var/list/nano_asset_dirs = list(\ - "nano/css/",\ - "nano/images/",\ - "nano/js/",\ - "nano/templates/"\ - ) - - var/list/files = null - for (var/path in nano_asset_dirs) - files = flist(path) - for(var/file in files) - if(copytext(file, length(file)) != "/") // files which end in "/" are actually directories, which we want to ignore - client << browse_rsc(file(path + file)) // send the file to the client + for(var/file in asset_files) + client << browse_rsc(file) // send the file to the client diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index ea0590152e3..d1bf4f170de 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -32,6 +32,7 @@ var/damage_msg = "\red You feel an intense pain" var/broken_description + var/vital //Lose a vital limb, die immediately. var/status = 0 var/open = 0 var/stage = 0 @@ -668,6 +669,9 @@ Note that amputating the affected organ does in fact remove the infection from t // OK so maybe your limb just flew off, but if it was attached to a pair of cuffs then hooray! Freedom! release_restraints() + if(vital) + owner.death() + /**************************************************** HELPERS ****************************************************/ @@ -831,7 +835,7 @@ Note that amputating the affected organ does in fact remove the infection from t max_damage = 75 min_broken_damage = 40 body_part = UPPER_TORSO - + vital = 1 /datum/organ/external/groin name = "groin" @@ -840,6 +844,7 @@ Note that amputating the affected organ does in fact remove the infection from t max_damage = 50 min_broken_damage = 30 body_part = LOWER_TORSO + vital = 1 /datum/organ/external/l_arm name = "l_arm" @@ -933,6 +938,7 @@ Note that amputating the affected organ does in fact remove the infection from t min_broken_damage = 40 body_part = HEAD var/disfigured = 0 + vital = 1 /datum/organ/external/head/get_icon() if (!owner) diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm index a1575b937ce..0cf732c9c28 100644 --- a/code/modules/projectiles/guns/projectile/rocket.dm +++ b/code/modules/projectiles/guns/projectile/rocket.dm @@ -43,7 +43,7 @@ var/obj/item/missile/M = new projectile(user.loc) playsound(user.loc, 'sound/effects/bang.ogg', 50, 1) M.primed = 1 - M.throw_at(target, missile_range, missile_speed) + M.throw_at(target, missile_range, missile_speed,user) message_admins("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).") log_game("[key_name_admin(user)] used a rocket launcher ([src.name]).") rockets -= I diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 5545883c2f8..b69f428410e 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -56,7 +56,7 @@ var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! grenades -= F F.loc = user.loc - F.throw_at(target, 30, 2) + F.throw_at(target, 30, 2, user) message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") log_game("[key_name_admin(user)] used a grenade ([src.name]).") F.active = 1 diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index a8d88bcf20b..d69773b5d4d 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -18,6 +18,12 @@ var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin") //var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin") +/obj/item/weapon/reagent_containers/borghypo/surgeon + reagent_ids = list("bicaridine", "inaprovaline", "dexalin") + +/obj/item/weapon/reagent_containers/borghypo/crisis + reagent_ids = list("tricordrazine", "inaprovaline", "tramadol") + /obj/item/weapon/reagent_containers/borghypo/New() ..() for(var/R in reagent_ids) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 129f54daa4d..e7e3cc4972f 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -123,20 +123,22 @@ shift_light(5, warning_color) if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY) var/stability = num2text(round((damage / explosion_point) * 100)) + var/alert_msg if(damage > emergency_point) shift_light(7, emergency_color) - radio.autosay(addtext(emergency_alert, " Instability: ",stability,"%"), "Supermatter Monitor") + alert_msg = addtext(emergency_alert, " Instability: ",stability,"%") lastwarning = world.timeofday - else if(damage >= damage_archived) // The damage is still going up - radio.autosay(addtext(warning_alert," Instability: ",stability,"%"), "Supermatter Monitor") + alert_msg = addtext(warning_alert," Instability: ",stability,"%") lastwarning = world.timeofday - 150 - - else // Phew, we're safe - radio.autosay(safe_alert, "Supermatter Monitor") + else // Phew, we're safe + alert_msg = safe_alert lastwarning = world.timeofday + if(!istype(L, /turf/space) && alert_msg) + radio.autosay(alert_msg, "Supermatter Monitor") + if(damage > explosion_point) for(var/mob/living/mob in living_mob_list) if(istype(mob, /mob/living/carbon/human)) diff --git a/code/setup.dm b/code/setup.dm index 6e9b058cafb..13974e022e7 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -27,6 +27,8 @@ #define HUMAN_NEEDED_OXYGEN MOLES_CELLSTANDARD*BREATH_PERCENTAGE*0.16 //Amount of air needed before pass out/suffocation commences +#define SOUND_MINIMUM_PRESSURE 10 + // Pressure limits. #define HAZARD_HIGH_PRESSURE 550 //This determins at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) #define WARNING_HIGH_PRESSURE 325 //This determins when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE) @@ -812,3 +814,5 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define IS_VOX 2 #define IS_SKRELL 3 #define IS_UNATHI 4 + +#define MAX_GEAR_COST 5 //Used in chargen for loadout limit. diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 7c86950ba63..67a1c2ce29a 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 95df7c430f8..7b38df77c49 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index c0e431f14ae..feafab49836 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index b55222ded06..ef7171a778d 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index 0aa57a3d430..fd88acf373c 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/mob/roaper.dmi b/icons/mob/roaper.dmi new file mode 100644 index 00000000000..272251ec8ae Binary files /dev/null and b/icons/mob/roaper.dmi differ diff --git a/icons/mob/species/tajaran/helmet.dmi b/icons/mob/species/tajaran/helmet.dmi index dc431a835af..7316d42bb39 100644 Binary files a/icons/mob/species/tajaran/helmet.dmi and b/icons/mob/species/tajaran/helmet.dmi differ diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi index 620da66a60c..13eb7174d94 100644 Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 5c5d0d9e7f4..9b8c463bab0 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/buildingobject.dmi b/icons/obj/buildingobject.dmi new file mode 100644 index 00000000000..76fa0e43500 Binary files /dev/null and b/icons/obj/buildingobject.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 67d085a46b0..901928b4145 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index e9d1a3d3f03..7506de201e0 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 1e59cbbb890..839fe059c82 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/ship_engine.dmi b/icons/obj/ship_engine.dmi new file mode 100644 index 00000000000..76546be416a Binary files /dev/null and b/icons/obj/ship_engine.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 8112fe02130..f3b129d2b7f 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/maps/overmap/_map.dmm b/maps/overmap/_map.dmm new file mode 100644 index 00000000000..92a83a87e1a --- /dev/null +++ b/maps/overmap/_map.dmm @@ -0,0 +1,24 @@ +"a" = (/turf/space,/area/centcom) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/bearcat/bearcat.dm b/maps/overmap/bearcat/bearcat.dm new file mode 100644 index 00000000000..801d2c7c18c --- /dev/null +++ b/maps/overmap/bearcat/bearcat.dm @@ -0,0 +1,119 @@ +/obj/effect/mapinfo/ship/bearcat + name = "CSV Bearcat" + landing_area = /area/ship/scrap/shuttle/ingoing + obj_type = /obj/effect/map/ship/bearcat + mapx = 4 + mapy = 4 + +/obj/effect/map/ship/bearcat + name = "generic ship" + desc = "Space faring vessel." + icon = 'maps/overmap/bearcat/bearcat.dmi' + icon_state = "ship" + +/obj/machinery/computer/shuttle_control/explore/bearcat + name = "exploration shuttle console" + shuttle_tag = "Exploration" + landing_type = /area/ship/scrap/shuttle/outgoing + + + +/area/ship/scrap + name = "\improper Generic Ship" + +/area/ship/scrap/crew + name = "\improper Crew Compartemnts" + icon_state = "hallC" + +/area/ship/scrap/crew/kitchen + name = "\improper Galley" + icon_state = "kitchen" + +/area/ship/scrap/crew/dorms + name = "\improper Dorms" + icon_state = "crew_quarters" + +/area/ship/scrap/crew/saloon + name = "\improper Saloon" + icon_state = "conference" + +/area/ship/scrap/crew/toilets + name = "\improper Bathrooms" + icon_state = "toilet" + +/area/ship/scrap/crew/wash + name = "\improper Washroom" + icon_state = "locker" + +/area/ship/scrap/crew/medbay + name = "\improper Medical Bay" + icon_state = "medbay" + +/area/ship/scrap/cargo + name = "\improper Cargo Hold" + icon_state = "quartstorage" + +/area/ship/scrap/dock + name = "\improper Docking Bay" + icon_state = "entry" + +/area/ship/scrap/unused1 + name = "\improper Unused Compartment #1" + icon_state = "green" + +/area/ship/scrap/unused2 + name = "\improper Unused Compartment #2" + icon_state = "yellow" + +/area/ship/scrap/unused3 + name = "\improper Unused Compartment #3" + icon_state = "blueold" + +/area/ship/scrap/maintenance + name = "\improper Maintenance Compartments" + icon_state = "storage" + +/area/ship/scrap/maintenance/storage + name = "\improper Tools Storage" + icon_state = "eva" + +/area/ship/scrap/maintenance/atmos + name = "\improper Atmospherics Comparment" + icon_state = "atmos" + music = list('sound/ambience/ambiatm1.ogg') + +/area/ship/scrap/maintenance/power + name = "\improper Power Compartment" + icon_state = "engine_smes" + +/area/ship/scrap/maintenance/engine + name = "\improper Engine Compartments" + icon_state = "engine" + music = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg') + +/area/ship/scrap/command + name = "\improper Command Deck" + icon_state = "centcom" + music = list('sound/ambience/signal.ogg') + +/area/ship/scrap/command/captain + name = "\improper Captain's Quarters" + icon_state = "captain" + +/area/ship/scrap/comms + name = "\improper Communications Relay" + 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" + +/area/ship/scrap/shuttle/outgoing + name = "\improper Docking Bay #1" + icon_state = "tcomsatcham" \ No newline at end of file diff --git a/maps/overmap/bearcat/bearcat.dmi b/maps/overmap/bearcat/bearcat.dmi new file mode 100644 index 00000000000..fb883ec0100 Binary files /dev/null and b/maps/overmap/bearcat/bearcat.dmi differ diff --git a/maps/overmap/bearcat/bearcat.dmm b/maps/overmap/bearcat/bearcat.dmm new file mode 100644 index 00000000000..be6541ec919 --- /dev/null +++ b/maps/overmap/bearcat/bearcat.dmm @@ -0,0 +1,471 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/space,/area/ship/scrap/command) +"ac" = (/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},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor,/area/ship/scrap/command) +"ad" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor,/area/ship/scrap/command) +"ae" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/grille,/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},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor,/area/ship/scrap/command) +"af" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/space,/area/ship/scrap/command) +"ag" = (/obj/machinery/computer/communications,/turf/simulated/floor/bluegrid,/area/ship/scrap/command) +"ah" = (/obj/machinery/computer/helm,/turf/simulated/floor/bluegrid,/area/ship/scrap/command) +"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/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/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) +"av" = (/turf/simulated/floor/bluegrid,/area/ship/scrap/comms) +"aw" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/power/apc{dir = 1; name = "Communications APC"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/ship/scrap/comms) +"ax" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/power/apc{dir = 4; name = "Bridge APC"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) +"ay" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/item/weapon/gun/energy/stunrevolver,/obj/structure/closet/cabinet,/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"az" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"aA" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"aB" = (/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/comms) +"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/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) +"aJ" = (/obj/structure/stool/bed/chair/comfy/brown,/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"aK" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -32; tag = "icon-alarm0 (NORTH)"},/turf/simulated/floor/bluegrid,/area/ship/scrap/comms) +"aL" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/ship/scrap/comms) +"aM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) +"aN" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{pixel_x = -32},/obj/structure/table,/obj/item/weapon/gun/projectile/shotgun/pump/combat{desc = "When words don't strike hard enough."; name = "Solid Argument"},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"aO" = (/obj/structure/cable{tag = "icon-4-9"; icon_state = "4-9"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"aP" = (/obj/structure/table/woodentable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Captain's Quarters APC"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain) +"aQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command) +"aR" = (/turf/simulated/wall/r_wall,/area/ship/scrap/dock) +"aS" = (/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/ship/scrap/dock) +"aT" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"},/area/ship/scrap/shuttle/outgoing) +"aU" = (/obj/structure/shuttle/window{tag = "icon-3"; icon_state = "3"},/turf/simulated/shuttle/floor,/area/ship/scrap/shuttle/outgoing) +"aV" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"},/area/ship/scrap/shuttle/outgoing) +"aW" = (/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/dock) +"aX" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; level = 2; on = 1},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"aY" = (/obj/machinery/atmospherics/pipe/manifold{icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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/dock) +"aZ" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; dir = 10; pixel_x = 0; level = 2; initialize_directions = 10},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Docking Area APC"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"ba" = (/turf/space,/area/ship/scrap/shuttle/ingoing) +"bb" = (/obj/structure/shuttle/window{tag = "icon-2"; icon_state = "2"},/turf/simulated/shuttle/floor,/area/ship/scrap/shuttle/outgoing) +"bc" = (/obj/structure/stool/bed/chair{tag = "icon-chair (NORTH)"; icon_state = "chair"; dir = 1},/turf/simulated/shuttle/floor,/area/ship/scrap/shuttle/outgoing) +"bd" = (/obj/machinery/computer/shuttle_control/explore/bearcat,/turf/simulated/shuttle/floor,/area/ship/scrap/shuttle/outgoing) +"be" = (/obj/structure/window/reinforced,/turf/space,/area) +"bf" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/space,/area/ship/scrap/dock) +"bg" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/ship/scrap/dock) +"bh" = (/obj/machinery/computer/shuttle_control/explore/bearcat,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/dock) +"bi" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/dock) +"bj" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/dock) +"bk" = (/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-plaque (SOUTHEAST)"; icon_state = "plaque"; dir = 6},/area/ship/scrap/dock) +"bm" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bn" = (/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/dock) +"bo" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/ship/scrap/shuttle/outgoing) +"bp" = (/turf/simulated/shuttle/floor,/area/ship/scrap/shuttle/outgoing) +"bq" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/ship/scrap/shuttle/outgoing) +"br" = (/obj/machinery/door/airlock/external,/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bs" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bt" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bu" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/dock) +"bv" = (/turf/simulated/floor{tag = "icon-loadingareadirty2 (EAST)"; icon_state = "loadingareadirty2"; dir = 4},/area/ship/scrap/dock) +"bw" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/dock) +"bx" = (/obj/structure/closet/walllocker/emerglocker/south,/obj/item/device/radio/intercom{pixel_x = -32},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"by" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bz" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9; level = 2},/obj/machinery/light_switch{pixel_x = 28},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bA" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/dock) +"bB" = (/turf/simulated/floor{tag = "icon-loadingareadirty1 (WEST)"; icon_state = "loadingareadirty1"; dir = 8},/area/ship/scrap/dock) +"bC" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/dock) +"bD" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area) +"bE" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area) +"bF" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6; level = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/dock) +"bG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/dock) +"bH" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/dock) +"bI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; level = 2; on = 1},/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/dock) +"bJ" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; dir = 10; pixel_x = 0; level = 2; initialize_directions = 10},/turf/simulated/floor,/area/ship/scrap/dock) +"bK" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/space,/area/ship/scrap/dock) +"bL" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"},/area/ship/scrap/shuttle/outgoing) +"bM" = (/obj/structure/shuttle/engine/platform,/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/ship/scrap/shuttle/outgoing) +"bN" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"},/area/ship/scrap/shuttle/outgoing) +"bO" = (/obj/structure/lattice,/turf/space,/area) +"bP" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor/plating,/area/ship/scrap/dock) +"bQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area) +"bR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/crew) +"bS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area) +"bT" = (/turf/space,/area/ship/scrap/shuttle/outgoing) +"bU" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area/ship/scrap/shuttle/outgoing) +"bV" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area) +"bW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/dock) +"bX" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area) +"bY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/crew) +"bZ" = (/turf/simulated/wall,/area/ship/scrap/crew/toilets) +"ca" = (/turf/simulated/wall/r_wall,/area/ship/scrap/crew/toilets) +"cb" = (/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/crew/toilets) +"cc" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor/plating,/area/ship/scrap/crew) +"cd" = (/turf/simulated/wall/r_wall,/area/ship/scrap/crew/saloon) +"ce" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/saloon) +"cf" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor/plating,/area/ship/scrap/crew) +"cg" = (/turf/simulated/wall/r_wall,/area/ship/scrap/crew/dorms) +"ch" = (/obj/structure/sign/poster,/turf/simulated/wall,/area/ship/scrap/crew/dorms) +"ci" = (/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/crew/dorms) +"cj" = (/turf/simulated/wall,/area/ship/scrap/crew/dorms) +"ck" = (/obj/structure/window/reinforced/tinted{tag = "icon-twindow (EAST)"; icon_state = "twindow"; dir = 4},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/structure/window/reinforced/tinted{dir = 1},/obj/item/weapon/soap,/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cl" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/structure/toilet,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{tag = "icon-twindow (EAST)"; icon_state = "twindow"; dir = 4},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cm" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/structure/mirror{pixel_y = 29},/obj/structure/sink{pixel_y = 18},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{tag = "icon-twindow (EAST)"; icon_state = "twindow"; dir = 4},/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cn" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor/plating,/area/ship/scrap/crew) +"co" = (/turf/simulated/wall,/area/ship/scrap/crew/saloon) +"cp" = (/obj/machinery/vending/snack,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/crew/saloon) +"cq" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/machinery/power/apc{dir = 1; name = "Crew Areas APC"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cr" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cs" = (/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor,/area/ship/scrap/crew/saloon) +"ct" = (/obj/machinery/vending/coffee,/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/crew/saloon) +"cu" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/dorms) +"cv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"cw" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"cx" = (/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/crew/toilets) +"cy" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Reception Window"; opacity = 1; req_access_txt = "0"},/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cz" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Reception Window"; opacity = 1; req_access_txt = "0"},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; level = 2; on = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cB" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/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/crew/toilets) +"cC" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"cD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/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/crew/saloon) +"cE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/crew/saloon) +"cF" = (/obj/structure/stool,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cG" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/landmark{name = "Observer-Start"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/item/ashtray/glass,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cH" = (/obj/structure/stool,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/ship/scrap/crew/saloon) +"cI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/crew/saloon) +"cJ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"cK" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/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/crew/dorms) +"cL" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/dorms) +"cM" = (/obj/structure/stool/bed,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/item/weapon/bedsheet/brown,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/dorms) +"cN" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"cO" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/structure/window/reinforced/tinted{tag = "icon-twindow (EAST)"; icon_state = "twindow"; dir = 4},/obj/structure/window/reinforced/tinted,/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cP" = (/obj/structure/toilet{tag = "icon-toilet00 (NORTH)"; icon_state = "toilet00"; dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{tag = "icon-twindow (EAST)"; icon_state = "twindow"; dir = 4},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cQ" = (/obj/structure/toilet{tag = "icon-toilet00 (NORTH)"; icon_state = "toilet00"; dir = 1},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{tag = "icon-twindow (EAST)"; icon_state = "twindow"; dir = 4},/obj/structure/window/reinforced/tinted,/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "Bathrooms APC"},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{tag = "icon-hydrofloor (SOUTHEAST)"; icon_state = "hydrofloor"; dir = 6},/area/ship/scrap/crew/toilets) +"cR" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c (EAST)"; icon_state = "conpipe-c"; dir = 4},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"cS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/ship/scrap/crew/saloon) +"cT" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/vending/cigarette,/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/crew/saloon) +"cU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cV" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cW" = (/obj/machinery/light/small,/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon) +"cX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/crew/saloon) +"cY" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"cZ" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"da" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"db" = (/turf/simulated/wall/r_wall,/area/ship/scrap/crew/kitchen) +"dc" = (/turf/simulated/wall,/area/ship/scrap/crew/kitchen) +"dd" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/closet/walllocker/emerglocker/east,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"de" = (/turf/simulated/wall,/area/ship/scrap/cargo) +"df" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/cargo) +"dg" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor,/area/ship/scrap/crew) +"dh" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/obj/machinery/power/apc{name = "Dorms APC"},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"di" = (/obj/structure/stool/bed,/obj/structure/closet/walllocker/emerglocker/south,/obj/item/weapon/bedsheet/green,/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"dj" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor,/area/ship/scrap/crew/dorms) +"dk" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"dl" = (/obj/machinery/processor,/obj/item/device/radio/intercom{pixel_y = 32},/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"dm" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/closet/secure_closet/freezer/fridge,/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen) +"dn" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "Crew Deck APC"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/ship/scrap/crew) +"do" = (/obj/structure/closet/crate,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"dp" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/device/radio/intercom{pixel_y = 32},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"dq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/cargo) +"dr" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"ds" = (/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"dt" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"du" = (/turf/simulated/wall,/area/ship/scrap/crew/medbay) +"dv" = (/turf/simulated/wall/r_wall,/area/ship/scrap/crew/medbay) +"dw" = (/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/engine) +"dx" = (/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/maintenance/engine) +"dy" = (/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/crew/kitchen) +"dz" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"dA" = (/obj/effect/landmark/start{name = "Chef"},/obj/structure/stool,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"dB" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "Galley APC"},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen) +"dC" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"dD" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"dE" = (/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"dF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor,/area/ship/scrap/cargo) +"dG" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"dH" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"dI" = (/obj/structure/sign/redcross,/turf/simulated/wall,/area/ship/scrap/crew/medbay) +"dJ" = (/obj/machinery/sleeper,/obj/structure/sign/nosmoking_2{pixel_y = 28},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"dK" = (/obj/machinery/sleep_console,/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"dL" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/item/device/radio/intercom{pixel_y = 32},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"dM" = (/turf/simulated/floor{tag = "icon-wall_thermite (SOUTHEAST)"; icon_state = "wall_thermite"; dir = 6},/area/ship/scrap/maintenance/engine) +"dN" = (/obj/structure/table,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"dO" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"dP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; level = 2; on = 1},/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c (EAST)"; icon_state = "conpipe-c"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen) +"dQ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/crew/kitchen) +"dR" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/obj/structure/disposalpipe/junction,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/ship/scrap/crew) +"dS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/cargo) +"dT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/cargo) +"dU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/ship/scrap/cargo) +"dV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/landmark/start{name = "Quartermaster"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/ship/scrap/cargo) +"dW" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/cargo) +"dX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/ship/scrap/cargo) +"dY" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/ship/scrap/crew) +"dZ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/crew/medbay) +"ea" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"eb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/structure/stool,/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"ec" = (/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"ed" = (/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/crew/medbay) +"ee" = (/obj/structure/sign{tag = "icon-radiation"; icon_state = "radiation"},/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/engine) +"ef" = (/obj/item/weapon/storage/pill_bottle/happy,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine) +"eg" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine) +"eh" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine) +"ei" = (/turf/simulated/floor{tag = "icon-platingdmg1"; icon_state = "platingdmg1"; dir = 2},/area) +"ej" = (/obj/structure/table,/obj/machinery/microwave,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"ek" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen) +"el" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{tag = "icon-pipe-t (NORTH)"; icon_state = "pipe-t"; dir = 1},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen) +"em" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"en" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"eo" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "Cargo Hold APC"},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"ep" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/box/syringes,/obj/structure/cable,/obj/machinery/power/apc{name = "Medical Bay APC"},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"eq" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/clothing/tie/stethoscope,/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"er" = (/obj/structure/table,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay) +"es" = (/obj/item/device/radio,/turf/simulated/floor/plating,/area) +"et" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/weapon/coin/gold,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine) +"eu" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine) +"ev" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/ship/scrap/maintenance/engine) +"ew" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/plating/airless,/area/ship/scrap/maintenance/engine) +"ex" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating,/area) +"ey" = (/turf/simulated/wall,/area/ship/scrap/crew/wash) +"ez" = (/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"eA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor,/area/ship/scrap/cargo) +"eB" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo) +"eC" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/ship/scrap/crew) +"eD" = (/turf/simulated/wall,/area/ship/scrap/unused2) +"eE" = (/turf/simulated/wall/r_wall,/area/ship/scrap/unused2) +"eF" = (/turf/simulated/wall,/area/ship/scrap/maintenance/engine) +"eG" = (/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/ship/scrap/maintenance/engine) +"eH" = (/turf/simulated/floor{tag = "icon-platingdmg2"; icon_state = "platingdmg2"; dir = 2},/area) +"eI" = (/turf/simulated/wall/r_wall,/area/ship/scrap/crew/wash) +"eJ" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"eK" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/device/radio/intercom{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6; level = 2},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"eL" = (/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c (EAST)"; icon_state = "conpipe-c"; dir = 4},/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/machinery/power/apc{dir = 1; name = "Washroom APC"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"eM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/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/crew/wash) +"eN" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/junction,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"eO" = (/turf/simulated/wall,/area/ship/scrap/maintenance/storage) +"eP" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"eQ" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/crew) +"eR" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor/plating,/area/ship/scrap/unused2) +"eS" = (/turf/simulated/floor{tag = "icon-platingdmg1"; icon_state = "platingdmg1"; dir = 2},/area/ship/scrap/unused2) +"eT" = (/turf/simulated/floor{tag = "icon-platingdmg3"; icon_state = "platingdmg3"; dir = 2},/area/ship/scrap/unused2) +"eU" = (/turf/simulated/floor/plating,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{tag = "icon-platingdmg2"; icon_state = "platingdmg2"; dir = 2},/area/ship/scrap/unused2) +"eV" = (/turf/simulated/floor/plating,/area) +"eW" = (/obj/structure/shuttle/engine/heater,/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/plating/airless,/area/ship/scrap/maintenance/engine) +"eX" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area) +"eY" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/space,/area) +"eZ" = (/obj/structure/lattice,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/turf/space,/area) +"fa" = (/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/crew/wash) +"fb" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"fc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1; pressure_checks = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"fd" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{tag = "icon-pipe-t (NORTH)"; icon_state = "pipe-t"; dir = 1},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"fe" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/crew) +"ff" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 7; pixel_y = 4},/obj/item/device/t_scanner,/obj/item/weapon/cell/high,/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage) +"fg" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/device/radio/intercom{pixel_y = 32},/obj/machinery/vending/tool,/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"fh" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/maintenance/storage) +"fi" = (/obj/structure/window/reinforced{dir = 8},/obj/item/stack/rods,/obj/item/stack/rods,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/structure/table,/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"fj" = (/obj/structure/table,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/suit/space/rig,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/mask/breath,/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage) +"fk" = (/obj/structure/closet/walllocker/emerglocker/west,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/crew) +"fl" = (/obj/effect/decal/cleanable/generic,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/ship/scrap/unused2) +"fm" = (/turf/simulated/floor/plating,/area/ship/scrap/unused2) +"fn" = (/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/unused2) +"fo" = (/turf/simulated/floor{tag = "icon-platingdmg3"; icon_state = "platingdmg3"; dir = 2},/area) +"fp" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"fq" = (/obj/structure/table,/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash) +"fr" = (/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/crew/wash) +"fs" = (/obj/structure/closet/walllocker/emerglocker/east,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"ft" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 5; pixel_y = -7},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/head/welding,/obj/item/device/analyzer,/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage) +"fu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/stool,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage) +"fv" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"fw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage) +"fx" = (/obj/structure/table,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/suit/space/rig,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/mask/breath,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage) +"fy" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/ship/scrap/crew) +"fz" = (/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/unused2) +"fA" = (/turf/simulated/wall/r_wall,/area/ship/scrap/unused1) +"fB" = (/turf/simulated/wall,/area/ship/scrap/unused1) +"fC" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew) +"fD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/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/storage) +"fE" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage) +"fF" = (/obj/effect/landmark/start{name = "Station Engineer"},/obj/effect/decal/cleanable/dirt,/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Interior Door"; req_access_txt = "0"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1; pressure_checks = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"fG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage) +"fH" = (/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/door/window/westleft,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage) +"fI" = (/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage) +"fJ" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"fK" = (/turf/simulated/floor/plating,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/turf/simulated/floor{tag = "icon-platingdmg2"; icon_state = "platingdmg2"; dir = 2},/area/ship/scrap/crew) +"fL" = (/turf/simulated/wall/r_wall,/area/ship/scrap/unused3) +"fM" = (/turf/simulated/wall,/area/ship/scrap/unused3) +"fN" = (/obj/structure/closet/firecloset/full,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"fO" = (/obj/machinery/alarm{pixel_y = 25},/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"fP" = (/obj/structure/closet/walllocker/emerglocker/east,/obj/structure/reagent_dispensers,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"fQ" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/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) +"fR" = (/obj/structure/table,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/bulbs,/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable,/obj/machinery/power/apc{name = "Tools Storage APC"},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage) +"fS" = (/obj/structure/table,/obj/item/clothing/head/welding,/obj/item/device/radio,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/ship/scrap/maintenance/storage) +"fT" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/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/storage) +"fU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/obj/structure/dispenser/oxygen,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage) +"fV" = (/obj/machinery/recharge_station,/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage) +"fW" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"fX" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/ship/scrap/unused3) +"fY" = (/turf/simulated/floor/plating,/area/ship/scrap/unused3) +"fZ" = (/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/unused1) +"ga" = (/obj/structure/closet/firecloset/full,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"gb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"gc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8; level = 1},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"gd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8; level = 1},/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/unused1) +"ge" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gf" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"gg" = (/obj/structure/falserwall,/turf/simulated/floor/plating,/area/ship/scrap/unused3) +"gh" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/ship/scrap/unused3) +"gi" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/plating,/area/ship/scrap/unused3) +"gj" = (/obj/machinery/power/apc{name = "Fire Closet APC"},/obj/structure/cable,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"gk" = (/obj/structure/reagent_dispensers,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1) +"gl" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gm" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/machinery/light/small,/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c"; icon_state = "conpipe-c"; dir = 2},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gn" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"go" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"gp" = (/obj/machinery/atmospherics/pipe/manifold4w{level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small{dir = 8; icon_state = "bulb1"; pixel_y = 16; tag = "icon-bulb1 (WEST)"},/turf/simulated/floor,/area/ship/scrap/maintenance) +"gq" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"gr" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/maintenance) +"gs" = (/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/atmos) +"gt" = (/turf/simulated/wall,/area/ship/scrap/maintenance/atmos) +"gu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/ship/scrap/maintenance) +"gv" = (/turf/simulated/wall,/area/ship/scrap/maintenance) +"gw" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/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) +"gx" = (/obj/structure/sign/poster{serial_number = 9},/turf/simulated/wall,/area/ship/scrap/maintenance) +"gy" = (/turf/simulated/wall,/area/ship/scrap/maintenance/power) +"gz" = (/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/power) +"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,/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) +"gH" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light_switch{pixel_y = 25},/obj/structure/table,/obj/item/ashtray/plastic,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gI" = (/obj/structure/stool/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Chief Engineer"},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gJ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gK" = (/obj/machinery/power/port_gen/pacman/super,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Power APC"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"gL" = (/obj/structure/table,/obj/item/device/flashlight,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 7; pixel_y = 4},/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"gM" = (/obj/structure/closet/crate,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/stack/sheet/mineral/uranium{amount = 50},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"gN" = (/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/maintenance/atmos) +"gO" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/obj/machinery/meter,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) +"gP" = (/obj/machinery/atmospherics/pipe/manifold{icon_state = "manifold"; level = 2},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) +"gQ" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) +"gR" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/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/atmos) +"gS" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) +"gT" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) +"gU" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance) +"gV" = (/obj/structure/cable{tag = "icon-1-10"; icon_state = "1-10"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9; level = 2},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance) +"gY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/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/power) +"gZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"ha" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"hb" = (/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"hc" = (/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/maintenance/power) +"hd" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) +"he" = (/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c (EAST)"; icon_state = "conpipe-c"; dir = 4},/obj/structure/cable,/obj/machinery/power/apc{name = "Atmospherics APC"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos) +"hf" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/atmos) +"hg" = (/obj/structure/closet/walllocker/emerglocker/west,/obj/structure/disposalpipe/junction{tag = "icon-pipe-j1 (WEST)"; icon_state = "pipe-j1"; dir = 8},/turf/simulated/floor{tag = "icon-warning"; icon_state = "warning"; dir = 2},/area/ship/scrap/maintenance) +"hh" = (/obj/structure/cable{tag = "icon-4-10"; icon_state = "4-10"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/radiation,/turf/simulated/floor{tag = "icon-warning"; icon_state = "warning"; dir = 2},/area/ship/scrap/maintenance) +"hi" = (/obj/structure/cable{tag = "icon-5-8"; icon_state = "5-8"},/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/computer/atmos_alert,/turf/simulated/floor{tag = "icon-warning"; icon_state = "warning"; dir = 2},/area/ship/scrap/maintenance) +"hj" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "off"; layer = 2.4; level = 2; on = 1; tag = "icon-off (NORTH)"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/monitor,/obj/structure/cable,/turf/simulated/floor{tag = "icon-warning"; icon_state = "warning"; dir = 2},/area/ship/scrap/maintenance) +"hk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/computer/station_alert,/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"hl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"hm" = (/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c (WEST)"; icon_state = "conpipe-c"; dir = 8},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/ship/scrap/maintenance) +"hn" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -32; tag = "icon-alarm0 (NORTH)"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"ho" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"hp" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power) +"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/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 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacadacaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacagahaiacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaacakalamacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacanaoanacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapaqapaparasasatasasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapauavawapaxasayazaAasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaCavaDaEaFaGaHaIaJataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapaKavaLapaMasaNaOaPasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapaBapapaQasasatasasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaSaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaUaUaVaaaaaaaRaWaWaRaXaYaZaRaWaWaRaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbcbdbbbebebfbgbhbibjbkblbmbjbnbiaWbebebebabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabobpbpbqbrbsbtbubvbwaRbxbybzaRbAbBbCbtbsbrbabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbcbcbbbDbDbEaWbFbGaRaRbHaRaRbIbJbgbKbDbDbabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbMbMbNaaaabOaRbPaRaRbQbRbSaRaRbPaRbOaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTbUbUbTaaaabObVbWbXaabVbYbXaabVbWbXbObObObabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObZcacbcacacccdcdcdcecdcdcdcfcgchcicjcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZckclcmbZcncocpcqcrcsctcocncjcucvcwcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxcyczcAcBcCcDcEcFcGcHcIcDcJcKcLcMcNciaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacOcPcQbZcRcScTcUcVcWcXcocYcgcZdacNciaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbdcdcdcdcdddedededfdedededgcjdhdidjcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbdkdldmdcdndedodpdqdrdsdedtdududvdudvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwdxbObOdydzdAdBdcdCdedDdEdFdEdGdedHdIdJdKdLdvbObOdxdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMdwdwdwbOdydNdOdPdQdRdSdTdUdVdWdXdSdYdZeaebecedbOdwdwdwdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeefegeheidcejekeldcemdeendrdqdoeodedtduepeqerdveseheteueeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwevewdwexeyeyeyeyeyemdeezdreAeBdEdeeCeDeDeEeDeEeieFevevdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadweGeGdweHeIeJeKeLeMeNeOeOeOePeOeOeOeQeReSeTeUeEeVdMeGeWdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYeYeZeVfafbfcfdeyfeeOfffgfhfifjeOfkeDeTflfmfnfoeZeYeYeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOeyfbfpfqfrfseOftfufvfwfxeOfyeDfmfzeTeDbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOfAfBfBfAfAfCfDfEfFfGfHfIfJfKfLfMfMfMfLbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafAfNfOfPfAfQeOfRfSfTfUfVeOfWfLfXfYfXfLbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafZgagbgcgdgeeOeOeOePeOeOeOgfggfYghgifLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafAgagjgkfAglgmgngogpgogogqgrfLfYfYfXfLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafAgsgsgsgsgtgugvgvgwgvgxgvgygzgzgzgzfLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagsgAgBgCgtgDgEgFgGgHgIgJgygKgLgMgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagNgOgPgQgRgSgTgUgVgWgWgXgYgZhahbhcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagshdhdhehfhghhhihjhkhlhmgzhnhohpgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagsgsgNhqdwhrdwdwdwdwdwdweFgzhcgzgzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahseFhthuhvhwhxhyhzeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFhthththAhBhChDeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFeFhEhFhGhHhIeFeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeFhJhKhLhKhMeFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxhNhNhNhNhNdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXaaaaaaaaaaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/example_sector1.dmm b/maps/overmap/example_sector1.dmm new file mode 100644 index 00000000000..55e125eaf45 --- /dev/null +++ b/maps/overmap/example_sector1.dmm @@ -0,0 +1,330 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area) +"ac" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area) +"ad" = (/turf/simulated/wall/r_wall,/area) +"ae" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomsat) +"af" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer) +"ag" = (/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"ah" = (/turf/space,/area/turret_protected/tcomsat) +"ai" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera{c_tag = "West Wing North"; dir = 2; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat) +"aj" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ak" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"al" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"am" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"an" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ao" = (/turf/simulated/floor/engine,/area/tcommsat/computer) +"ap" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor,/area/tcommsat/computer) +"aq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer) +"ar" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor,/area/tcommsat/computer) +"as" = (/obj/machinery/camera{c_tag = "Lounge"; dir = 2; network = list("Tcomsat")},/turf/simulated/floor,/area/tcommsat/computer) +"at" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor,/area/tcommsat/computer) +"au" = (/turf/simulated/floor,/area/tcommsat/computer) +"av" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat) +"aw" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ax" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ay" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"az" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aB" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat) +"aC" = (/obj/structure/filingcabinet,/turf/simulated/floor,/area/tcommsat/computer) +"aD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Main Computer Room"; dir = 2; network = list("Tcomsat")},/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer) +"aE" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/turf/simulated/floor,/area/tcommsat/computer) +"aF" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/tcommsat/computer) +"aG" = (/obj/item/weapon/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/engine,/area/tcommsat/computer) +"aH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer) +"aI" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat) +"aJ" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aK" = (/obj/machinery/atmospherics/valve/digital{pipe_color = "cyan"; icon_state = "valve1"; name = "Mixed Air Outlet Valve"; open = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aL" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aN" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat) +"aO" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor,/area/tcommsat/computer) +"aP" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor,/area/tcommsat/computer) +"aQ" = (/obj/machinery/computer/telecomms/monitor{network = "tcommsat"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer) +"aR" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/tcommsat/computer) +"aS" = (/obj/structure/lattice,/turf/space,/area) +"aT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"aU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/turret_protected/tcomsat) +"aV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"aW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) +"aX" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) +"aY" = (/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat) +"aZ" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall/r_wall,/area/tcommsat/computer) +"ba" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) +"bb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/computer) +"bc" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) +"bd" = (/obj/machinery/computer/telecomms/server{network = "tcommsat"},/turf/simulated/floor,/area/tcommsat/computer) +"be" = (/obj/item/weapon/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/engine,/area/tcommsat/computer) +"bf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor,/area/tcommsat/computer) +"bg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/tcommsat/computer) +"bh" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) +"bi" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor,/area/tcommsat/computer) +"bj" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/tcommsat/computer) +"bk" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"bl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"bm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"bn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"bo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room"; req_access_txt = "61"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer) +"bp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/tcommsat/computer) +"bq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (NORTH)"; icon_state = "manifold-f"; dir = 1},/turf/simulated/floor,/area/tcommsat/computer) +"br" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor,/area/tcommsat/computer) +"bs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor,/area/tcommsat/computer) +"bt" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (SOUTHWEST)"; icon_state = "intact-f"; dir = 10},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor,/area/tcommsat/computer) +"bu" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"bv" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/tcommsat/computer) +"bw" = (/obj/machinery/vending/cola,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcommsat/computer) +"bx" = (/obj/item/weapon/cigbutt,/obj/machinery/light,/turf/simulated/floor,/area/tcommsat/computer) +"by" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/tcommsat/computer) +"bz" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) +"bA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/computer) +"bB" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area) +"bC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area) +"bD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area) +"bE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"bF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) +"bG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/turret_protected/tcomsat) +"bH" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat) +"bI" = (/obj/machinery/light{dir = 8},/obj/structure/table,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer) +"bJ" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 1; on = 1},/turf/simulated/floor,/area/tcommsat/computer) +"bK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/tcommsat/computer) +"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer) +"bM" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window/eastleft{req_access_txt = "61"},/obj/machinery/door/window/westleft{req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber) +"bN" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber) +"bO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/tcommsat/computer) +"bP" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/computer) +"bQ" = (/obj/machinery/turret{lasers = 1; lasertype = 2},/turf/simulated/floor/plating/airless,/area/turret_protected/tcomsat) +"bR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"bS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/tcommsat/chamber) +"bT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) +"bU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber) +"bV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHEAST)"; icon_state = "intact-f"; dir = 5},/turf/simulated/floor/plating,/area/tcommsat/chamber) +"bW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (SOUTHWEST)"; icon_state = "intact-f"; dir = 10},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"bX" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Server Access"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber) +"bY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"bZ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"ca" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"cb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"cc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"cd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/turret_protected/tcomsat) +"ce" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cf" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"ch" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"ci" = (/obj/machinery/camera{c_tag = "Central Compartment North"; dir = 2; network = list("Tcomsat")},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"ck" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cl" = (/turf/simulated/floor/plating/airless,/area) +"cm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"cn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/turret_protected/tcomsat) +"co" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"ct" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"cu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/space,/area/turret_protected/tcomsat) +"cv" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cx" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cy" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cA" = (/obj/structure/table,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/turret_protected/tcomsat) +"cB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/camera{c_tag = "Telecoms Storage"; network = list("Tcomsat")},/turf/simulated/floor,/area/turret_protected/tcomsat) +"cC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor,/area/turret_protected/tcomsat) +"cD" = (/obj/machinery/camera{c_tag = "West Solars"; dir = 8; network = list("Tcomsat")},/turf/space,/area) +"cE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"cF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera{c_tag = "West Wing Middle"; dir = 8; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat) +"cG" = (/obj/machinery/telecomms/broadcaster/preset_left,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cH" = (/obj/machinery/telecomms/broadcaster/preset_right,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/turret_protected/tcomsat) +"cJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"cK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat) +"cL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"cM" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/turret_protected/tcomsat) +"cN" = (/turf/simulated/floor,/area/turret_protected/tcomsat) +"cO" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor,/area/turret_protected/tcomsat) +"cP" = (/turf/simulated/floor/plating,/area) +"cQ" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat) +"cR" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cS" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cT" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cU" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/telecomms/hub/preset,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cW" = (/obj/machinery/telecomms/relay/preset/station,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cX" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cY" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"cZ" = (/obj/structure/sign/nosmoking_2{pixel_x = 32; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"da" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/turret_protected/tcomsat) +"db" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"de" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomsat) +"df" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dg" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dh" = (/obj/machinery/telecomms/receiver/preset_left,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"di" = (/obj/machinery/telecomms/receiver/preset_right,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dj" = (/obj/machinery/telecomms/bus/preset_three,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dk" = (/obj/machinery/telecomms/processor/preset_three,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat) +"dm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"dn" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/turret_protected/tcomsat) +"do" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/turret_protected/tcomsat) +"dp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"dq" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomsat) +"dr" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/turret_protected/tcomsat) +"ds" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/turret_protected/tcomsat) +"dt" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"du" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dw" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHWEST)"; icon_state = "intact-f"; dir = 9},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dx" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dy" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"dA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"dB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat) +"dC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dD" = (/obj/machinery/camera{c_tag = "Central Compartment South"; dir = 1; network = list("Tcomsat")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"dF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"dG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"dH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat) +"dI" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat) +"dJ" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) +"dK" = (/obj/machinery/turret{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"dL" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) +"dM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer) +"dN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/turretid{ailock = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; icon_state = "motion1"; lethal = 1; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Telecoms Foyer"; dir = 2; network = list("Tcomsat")},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"dO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) +"dP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer) +"dQ" = (/obj/machinery/turret{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"dR" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat) +"dS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat) +"dT" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"dU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"dV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomfoyer) +"dW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"dX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"dY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"dZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"ea" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"ec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"ed" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomfoyer) +"ee" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat) +"ef" = (/obj/machinery/camera{c_tag = "East Wing South"; dir = 8; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat) +"eg" = (/obj/machinery/camera{c_tag = "West Wing South"; dir = 4; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat) +"eh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat) +"ei" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"ej" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/turret_protected/tcomfoyer) +"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"el" = (/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"em" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/turret_protected/tcomfoyer) +"en" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/turret_protected/tcomfoyer) +"eo" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"ep" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer) +"eq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access_txt = "61"},/turf/simulated/floor,/area/turret_protected/tcomfoyer) +"er" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"es" = (/obj/machinery/power/smes/magical,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/tcommsat/entrance) +"et" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance) +"eu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"ev" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/tcommsat/entrance) +"ew" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcommsat/entrance) +"ex" = (/obj/machinery/turretid{ailock = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; icon_state = "motion3"; lethal = 0; name = "Telecoms Foyer turret control"; pixel_y = 29; req_access = list(61)},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/entrance) +"ey" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"ez" = (/turf/simulated/floor,/area/tcommsat/entrance) +"eA" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) +"eB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/entrance) +"eC" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcommsat/entrance) +"eD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/tcommsat/entrance) +"eE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/camera{c_tag = "Power Room West"; dir = 1; network = list("Tcomsat")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/tcommsat/entrance) +"eF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor,/area/tcommsat/entrance) +"eG" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/tcommsat/entrance) +"eH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/tcommsat/entrance) +"eI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/camera{c_tag = "Power Room East"; dir = 1; network = list("Tcomsat")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/tcommsat/entrance) +"eJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/tcommsat/entrance) +"eK" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"eL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access_txt = "61"},/turf/simulated/floor,/area/tcommsat/entrance) +"eM" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"eN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/tcommsat/entrance) +"eO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcommsat/entrance) +"eP" = (/obj/machinery/camera{c_tag = "Entrance North"; dir = 2; network = list("Tcomsat")},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/tcommsat/entrance) +"eQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/tcommsat/entrance) +"eR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/tcommsat/entrance) +"eS" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/tcommsat/entrance) +"eT" = (/turf/space,/area/shuttle/escape_pod1/centcom) +"eU" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor,/area/tcommsat/entrance) +"eV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor,/area/tcommsat/entrance) +"eW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/tcommsat/entrance) +"eX" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor,/area/tcommsat/entrance) +"eY" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"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/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 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababacababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaababadadadadadadadadadadadadadadadadadadadadadadadadadadadababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababadadaeaeaeaeaeaeaeaeaeadadadadadadadadadafafafafafafafafadababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadadaeagahaiajakalamanaeafafafafafafafafaoafapaqarasatauafadadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeagagagavawaxayazaAaBafauaCaDaEauaFafaGafaHauauauauauafadadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahaIaJaKayaLaMaNafaOauaPauauaQafaGafaRauauauauauafadadaSaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahahaTaUaVaWaXaYaZbabbauaubcbdafbeafbfbgaubhbibjafadadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahaIbkblbmbnbnbnbobpbqbrbsbtbububuafbvbwaubxbybzbAbBbBbCbDaaaaaaaaaaaaaaaaaa +aaaaaaaaaaabababadaeahagahaIbEbFbGbHbHbHafbIbJbKaubLbMbNbuafafbObPafafafafadadababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaSabadaeagbQagbRbEaBbubububububSbTbUbTbVbWbXbYbububZcacbagbQagaeadababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahaIcccdbucecececfcgchcicececjckcecebubZcaaNahagahaeadababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclaaabadaeahagahaIcmcnbuceckckckcockcpckckcockckcebubZcaaNcqcrcsaeadadabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclaaabadaeahagahaIctcubucecvckckcockcwckckcocxcycebubZcaaNczcAcBcCaeadabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclcDabadaeahagahaIcEcFbuceckckckcocGcwcHckcockckcebucIcJcKcLcMcNcOaeadabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclcPacadaeagagagbRbEcQbucRcScTcUcjcecVcececWcXcYcZbudadbdcddcNcNdeaeadacaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclaaabadaeahagahaIbEaNbucedfdgckcodhcwdickcodjdkcebuaIcEdldmcNdndoaeadabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclaaabadaeahagahaIcEaNbuceckckckcockcwckckcockckcebuaIcEaNdpdqdrdsaeadabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaclaaabadaeahagahaIbEaNbucedtdudvdwckcpckckcodxdycebuaIcEaNdzdAdBaeadadabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahaIbEaNbucececedCcecedDcecedEcececebuaIcEaNahagahaeadababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaababadaeagbQagbRcEaBbububububububudFbubububububububRcEaBagbQagaeadababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaabababadaeahagahaIdGdHdIaYaYdJdKdLdMdNdOdPdQdJaYaYdRdScEaNahagahaeadababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahaIdTdUdUdUdUdVdWdXdYdZeaebeceddUdcdUdUeeaNahagefaeadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeegagahahbHbHehbHbHdJeiejekdZelemendJbHbHbHbHbHahahagahaeadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeahagahahahahagaheodJdJdJepeqdJdJdJdJeoahahahahahahagahaeadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadaeagagagagagagagagereseteuevewexeyezeAeBagagagagagagagagaeadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabadadaeagahahahahahaeeoeCeDeEeFeGeHeIeHeJeoaeahahahahahagaeadadabaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababadadaeaeaeaeaeaeaeeoeoeoeoeKeLeMeoeoeoeoaeaeaeaeaeaeaeadadababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaababadadadadadadadadadadadeoeNeOePeoadadadadadadadadadadadababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabababababababababababeoeoeQeReSeoeoabababababababababababaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTababeoeoeUeVeWeHeXeoeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTeoeoeYeZfaezezezezfbeoabaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTfcfdfeffezezfgezezfheoabaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTeMeoeofifjezezezezfbeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTababeoeofkflflflfmeoeoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaeTeTeTeTabababeoeofnfofpeoeoabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababeoeoeoeoeoababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaabababacabababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +fqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/example_sector2.dmm b/maps/overmap/example_sector2.dmm new file mode 100644 index 00000000000..48fa14cd97c --- /dev/null +++ b/maps/overmap/example_sector2.dmm @@ -0,0 +1,180 @@ +"aa" = (/turf/space,/area) +"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) = {" +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 00000000000..f736bf319cb --- /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/maps/tgstation2.dmm b/maps/tgstation2.dmm index 5f7f2fcdd86..83d3cdb9a07 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -8082,7 +8082,7 @@ "cZv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Main Computer Room"; dir = 2; network = list("Tcomsat")},/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer) "cZw" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/turf/simulated/floor,/area/tcommsat/computer) "cZx" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/tcommsat/computer) -"cZy" = (/obj/item/weapon/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/engine,/area/tcommsat/computer) +"cZy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/hallway) "cZz" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer) "cZA" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat) "cZB" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "swall_floor_f10"},/area/shuttle/escape/centcom) @@ -8105,7 +8105,7 @@ "cZS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/computer) "cZT" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) "cZU" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/tdome) -"cZV" = (/obj/item/weapon/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/engine,/area/tcommsat/computer) +"cZV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/hallway) "cZW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor,/area/tcommsat/computer) "cZX" = (/obj/machinery/atmospherics/pipe/manifold/visible{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor,/area/tdome) "cZY" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/tcommsat/computer) @@ -8604,7 +8604,7 @@ "djx" = (/obj/item/clothing/head/bearpelt,/obj/item/xenos_claw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "djy" = (/obj/item/clothing/head/bowler,/obj/item/weapon/broken_bottle,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "djz" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) -"djA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/hallway) +"djA" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/shuttle/floor,/area/supply/dock) "djB" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "djC" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer) "djD" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) @@ -8643,7 +8643,7 @@ "dkk" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "dkl" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "dkm" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) -"dkn" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/hallway) +"dkn" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock) "dko" = (/obj/structure/rack,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "dkp" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "dkq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station) @@ -9703,9 +9703,11 @@ "dEE" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/research_outpost/tempstorage) "dEF" = (/obj/structure/rack,/obj/item/weapon/gun/launcher/pneumatic,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/harpoon,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station) "dEG" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"dEH" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/engine,/area/tcommsat/computer) "dEI" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) "dEJ" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/research_outpost/maint) "dEK" = (/obj/machinery/artifact_analyser,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid,/area/research_outpost/anomaly) +"dEL" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/engine,/area/tcommsat/computer) "dEU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/research_outpost/spectro) "dEV" = (/obj/machinery/camera{c_tag = "Isolation Room Three"; dir = 8; network = list("Anomaly Isolation")},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3) "dEW" = (/obj/structure/closet/walllocker/emerglocker/west,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/research_outpost/maintstore2) @@ -10926,7 +10928,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcoHcsOcsNcvgcuVcsWbpIcsMcsEcsmcoycoEcoDdgFbAkbYpcpdcpbcpccpgcpfcpecpfdgIcoWdgGdgHdgKdgLdgJdgHdgGbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdgYcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafdgRdgPdgQdgQdgQccQbudcCKcyldgTdgSdgMdgMdgMdgXdgWdgWdgVdgMdgMdgNdgOdfTcbjcpjcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecrgcnicrebTecrccnfcrbbTecracnccqZbTeaaaaafcphcrdbSGbSGcqqbWbbSFdPYdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcrhcricrkcridhIcrqdhKdhLdhGdhHdgGdgGdgGbkjbEadhOebrdBIebpebqebiebjdQhebhebmebnebkdBNebcdhNebadQabJNebfdQedQddhMbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaabwwdhWdhUdBXdhTbuddQidQSdQRdfTdhVbyYbyYbyYdhPcvudhQdhSbyYbyYbyYdhYdfTdhXcrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdPAdPvcqvcqucqtcqscqAcqAdhvcqBcqAcmpcsubAkbAkbjqcqIcqJcpDcqCcqCcqHdhBdhCdgGdhAdhydhzdhwdhxdgGbkjbEadhDeaMdCpeaOeaPbEaeaFdPDeaHdXBeaIeaJdCqeaSdhEdXBbfMbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabudbudbudbudbudbudbudbudbuddPHdPSdPPdfTdfTbZPbOwcdqdfTdfTdfTdfTcoTbOwcdqdfTdfTccSdhFccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIdbicszbQGcsBcsAbQGcsCcsDcmJcmJdTDcmJchBcsGcsFchBcsHcsvdjAdkncswcaOcaOcaOcaOcsxcsycaOcjXcjXcjXcjXcjXcjXbkjbEaebRdibdCyebNebObEaeaFdTLebMdXBebKebIdCzdiaebGdXBbfMbPydXFebFebEdhZdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabudcnbcmXcmYdTJdTKcdydTHcfcdTIdTFdTEdTGcrHaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIdbicszbQGcsBcsAbQGcsCcsDcmJcmJdTDcmJchBcsGcsFchBcsHcsvcZycZVcswcaOcaOcaOcaOcsxcsycaOcjXcjXcjXcjXcjXcjXbkjbEaebRdibdCyebNebObEaeaFdTLebMdXBebKebIdCzdiaebGdXBbfMbPydXFebFebEdhZdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabudcnbcmXcmYdTJdTKcdydTHcfcdTIdTFdTEdTGcrHaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcrOcrUcrTcrSdQTdQWdQVdQUchBcsadZEcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOdRMdRMcsfclLclLcjXbkjbEabEaebxdCJbEabEabEaebvckYebwdXBdXBdXBdDhebCdXBdXBbfMcpqdXFdYWdYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbudccCcoLccCdRNcmEcbWdTCcfcdRUdTAdRUbudbudaaaaaaaaaaafaafaaaaaeaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbMbSZcgtcgrcgqcgAcgGchrcgFbSZcgDcgBcgCcgAbSZcgycgzcgwcgxcgucgvceVchachgdYGcgYcgXcgZckyclWclRcmacgUcgIcgHcgKcgJchjchkchlcaOcaPcaPcaPcaPchhchicaOcoVcoVcoVclLclLcjXbkjdaTbEadXWdDidXLdXVbEadXZckYdXYdXBdYadXRdDjdYbdXBbPybfMcpqdXFcmucmtcmvdXFaaaaaaaaaaaaaaaaaabVuckZbYRceXbVuaafaaaaaaaaaaaabudccCccCccCcllclmcdyclsclNdaUclPclOclQbudaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafcfqcfpcfmcbDcfmcbDcfmcbDcfocbDcfmcbDcfncbkcbkcbkcflbSZbSZcfkbSZcgccbkcgbcgacfZcfTcfSckyckxckuckqcfJcfGcfFcfAcfzcducfycfxcaOcgocfvcfvcfvcftcfucaOckgcfgcfgcfgcfrcjXbkjdaLbEadXJdXKdXLdXLdXMdXNcjxdXPdXQdXRdXRdXSdXCdXBciZciNbGKbZJbVucZgbVubZJaaaaaaaafaaaaaaaaabVuceuccOccYbVuaafaafaaaaaaaaabudcfccfccfccfcckfcbWcjFcjEcjyckeckdcjWbudaaaaaaaaaaaaaaachcchcchcchdaafaafaafaafcfVaafaafaafaafaafampchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11138,11 +11140,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHecGHcGncGncGncGncGncGwcGncGncGdcGdcGdcGdcGdcGdcGdcHfdiCcGrcGrcGrcGrcGrcGScGXcGUcyfcHhcGUcGXcGXcGXcHicHjcHjcHjcHjcHjcHjcHjcHjcHkcHacHlcHmcHmcHmcHmcHmcHncHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHocGdcHpcGncHpcGncHpcGdcGncGncGndiBcHqcGbcGbcGbcGbcGbcHrdizcHjcHjcHjcHicGXcGXcGXcGXcGXcGXcGXcGXcGXcHicHjcHjcHjcHjcHjcHjcHjcHjcHkcHacHscHtcHtcHtcHtcHtcHscHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGdcGdcGdcGdcGdcGdcGdcGncGndiAcGncHqcGbcGbcGbcGbcGbcHrdizcHjcHjcHjcHicGXcGXcGXcGXcGXcGXcGXcGScGScGrcGrcGrcGrcGrcGrcGrcGrcGrcGFcHacHscHtcHtcHtcHtcHtcHscGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGccGdcHucHvcHwcHucHxcGdcGncGncGndiFcHqcGbcGbcGbcGbcGbcGbcGrcGrcGrcGrcGrcGXcGXcGUcyfcygcGUcGXcHycHzcGrcHAcHBcHBcHCcGrcHDcHEcHFcGFcHbcHscHtcHtcHtcHtcHtdiGcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGccGdcHucHvcHwcHucHxcGdcGncGncGndiFcHqcGbcGbcGbcGbcGbcGbcGrcGrcGrcGrcGrcGXcGXcGUcyfcygcGUcGXcHycHzcGrcHAcHBcHBcHCcGrcHDcHEcHFcGFcHbcHscHtcHtcHtcHtdjAdiGcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGGcGHcHHcHHcHHcHHcHHcGwcGncGncGdcGdcGdcGdcGdcGdcGdcGfcGbcGrcGzcGAcGBcGrcGXcGXcGUcyfcHIcGUcGXcGScGScGrcHJcHJcHJcHJcGrcHKcHEcHLcGFcHbcHscHtcHtcHtcHtcHtdiDcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHecGHcHNcHHcHHcHHcHHcGdcGncGncGncGncGncGdcGncHOcHPcGdcGbcGrcGQcGAcGAcGRcGXcGXcGXcGXcGXcGXcGXcGXcGXcGrcHJcHQcHRcHRcGrcGrcHScGrcGFcHbcHscHtcHtcHtcHtdiEcHscGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHocGdcGdcHUcHVcHVcHVcGdcGncHWcHXcHYcGncGwcGncHZcIacGdcGbcGrcGrcGrcGrcGrcGrcGrcIbcGrcGrcGrcGXcGXcGXcIccHJcIdcIdcHJcHJcHJcHJcIecGFcHbcHscHtcHtcHtcHtcHtdiDcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcHocGdcHHcHHcHHcHHcGdcGncHXcIfcHXcGncGdcHpcGdcGdcHfcGbcGrcIgcIhcIicGrcIjcIkcIkcIkcIlcGrcGXcGXcGXcGXcHJcHJcHJcHJcImcHJcHJcHRcGFcHbcHscHtcHtcHtcHtcHtdiHcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcHocGdcHHcHHcHHcHHcGdcGncHXcIfcHXcGncGdcHpcGdcGdcHfcGbcGrcIgcIhcIicGrcIjcIkcIkcIkcIlcGrcGXcGXcGXcGXcHJcHJcHJcHJcImcHJcHJcHRcGFcHbcHscHtcHtcHtcHtdkndiHcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGbcHocGdcIocIpcIqcGdcGncGncGncGncGncGdcGdcGdcHfcGbcGbcGrcIrcIscItcIucIkcIkcIkcIkcIvcGrcGXcGXcGXcIccIwcHJcHJcHJcIxcHJcHJcIycGFcHbcHscHtcHtcHtcHtcHtcHscGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGbcGbcHocGdcGdcGdcGdcGdcGdcGdcGdcGdcGdcHfcGbcGbcGbcGbcGrcGrcIzcIAcGrcGrcGrcIzcIBcIAcGrcGXcGXcGXcGrcICcIDcIDcIDcIDcIDcIEcGrcGFcHbcIFcUQcHtcHtcHtcUycIIcHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGrcIJcIJcIJcIJcIJcIJcIJcIJcIJcGrcGrcIKcGrcGrcIJcIJcIJcIJcIJcIJcIJcGrcGFcHbcILcIMcINcINcINcIMcIOcHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11391,9 +11393,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTacTchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcacTacTcYWcYWcYWcYWcYWcYWcYWcYWcYWacTacTacTacTacTacTacTacTacTcYXcYXcYXcYXcYXcYXcYXcYXacTchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTacTcYWcYYcYZcZacZbdeQdbkdbjcZfcYWcYXcYXcYXcYXcYXcYXcYXcYXdkAcYXcZhcZicZjcZkcZlcZmcYXacTacTchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYYcYYcYYcZncZodbgcZqdbhcZscZtcYXcZmcZucZvcZwcZmcZxcYXcZycYXcZzcZmcZmcZmcZmcZmcYXacTacTchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYZcYYcYZcZAdbScZCcZqcZDcZEcZFcYXcZGcZmcZHcZmcZmdbRcYXcZycYXcZJcZmcZmcZmcZmcZmcYXacTacTaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYZcYYcYZcYZdbNdbGcZMcZNcZOcZPdbBdbycZScZmcZmcZTdbucYXcZVcYXcZWdbpcZmcZYcZZdaacYXacTacTchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYYcYYcYYcZncZodbgcZqdbhcZscZtcYXcZmcZucZvcZwcZmcZxcYXdEHcYXcZzcZmcZmcZmcZmcZmcYXacTacTchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYZcYYcYZcZAdbScZCcZqcZDcZEcZFcYXcZGcZmcZHcZmcZmdbRcYXdEHcYXcZJcZmcZmcZmcZmcZmcYXacTacTaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYZcYYcYZcYZdbNdbGcZMcZNcZOcZPdbBdbycZScZmcZmcZTdbucYXdELcYXcZWdbpcZmcZYcZZdaacYXacTacTchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcacTcYWcYZcYYcYZcZAdcPdcOdcNdcMdcMdcMdcLdcKdcGdcFdcDdgddaldaldalcYXdamdcEcZmdaodapdaqdardasdasdatbUMdauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcchcchcchcchcchcchcchcchdchcchcchcchcchcchcchcchcchcchcchcacTcYWcYZcYYcYZcZAdcndawdaxdaydaydaycYXdcmdaAdaBcZmdbTdaDdaEdalcYXcYXdbUdaGcYXcYXcYXcYXacTacTchcchcchcchcchcchcchcchcchcchcchcchcchcchcchcchcchcchdchcchcchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafchcacTcYWcYYdaHcYYdaIdcncZtdaldaldaldaldalddjdaKddgdaKddmddndaOdaPdaldaldcVdaRdaScYYdaHcYYcYWacTchcchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/templates/engines_control.tmpl b/nano/templates/engines_control.tmpl new file mode 100644 index 00000000000..505150964ac --- /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 00000000000..1457d7a3368 --- /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 00000000000..443b3190a92 --- /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 diff --git a/sound/machines/airalarm.ogg b/sound/machines/airalarm.ogg new file mode 100644 index 00000000000..cc543b444ed Binary files /dev/null and b/sound/machines/airalarm.ogg differ diff --git a/sound/weapons/flipblade.ogg b/sound/weapons/flipblade.ogg new file mode 100644 index 00000000000..ca09831fffc Binary files /dev/null and b/sound/weapons/flipblade.ogg differ diff --git a/sound/weapons/throwtap.ogg b/sound/weapons/throwtap.ogg new file mode 100644 index 00000000000..7806a789818 Binary files /dev/null and b/sound/weapons/throwtap.ogg differ diff --git a/tools/mapmerge/mapmerge.sh b/tools/mapmerge/mapmerge.sh old mode 100644 new mode 100755