diff --git a/LICENSE-CC-BY-NC-SA.txt b/LICENSE-CC-BY-NC-SA.txt new file mode 100644 index 0000000000..860915c5c0 --- /dev/null +++ b/LICENSE-CC-BY-NC-SA.txt @@ -0,0 +1,60 @@ +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + to Distribute and Publicly Perform Adaptations. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e). + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested. + You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. + You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works. + If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + For the avoidance of doubt: + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, + Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/README.md b/README.md index 7bef0d8b45..cab1589aca 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,14 @@ If you wish to develop and host this codebase in a closed source manner you may See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. +Any files located in the +`vorestation/goon`, +`vorestation/icons/goonstation`, or +`vorestation/sound/goonstation` +directories, or any subdirectories of mentioned directories are licensed under the +Creative Commons 3.0 BY-NC-SA license +(https://creativecommons.org/licenses/by-nc-sa/3.0) + All assets including icons and sound are under a [CC BY-SA 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license unless otherwise indicated. ### GETTING THE CODE diff --git a/code/__defines/_compile_options.dm b/code/__defines/_compile_options.dm index 10a6485c44..b68300eeb2 100644 --- a/code/__defines/_compile_options.dm +++ b/code/__defines/_compile_options.dm @@ -15,6 +15,9 @@ //#define ZASDBG // Uncomment to turn on super detailed ZAS debugging that probably won't even compile. #define MULTIZAS // Uncomment to turn on Multi-Z ZAS Support! +// Comment/Uncomment this to turn off/on shuttle code debugging logs +#define DEBUG_SHUTTLES + // If we are doing the map test build, do not include the main maps, only the submaps. #if MAP_TEST #define USING_MAP_DATUM /datum/map diff --git a/code/__defines/_lists.dm b/code/__defines/_lists.dm index 2a570f6f42..016d1a89d4 100644 --- a/code/__defines/_lists.dm +++ b/code/__defines/_lists.dm @@ -18,6 +18,9 @@ #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; +// Adds I to L, initalizing L if necessary, if I is not already in L +#define LAZYDISTINCTADD(L, I) if(!L) { L = list(); } L |= I; + #define LAZYFIND(L, V) L ? L.Find(V) : 0 // Reads I from L safely - Works with both associative and traditional lists. diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm index ab85326658..278a2064db 100644 --- a/code/__defines/qdel.dm +++ b/code/__defines/qdel.dm @@ -26,6 +26,7 @@ #define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE) #define QDEL_IN_CLIENT_TIME(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME) #define QDEL_NULL(item) qdel(item); item = null +#define QDEL_NULL_LIST QDEL_LIST_NULL #define QDEL_LIST_NULL(x) if(x) { for(var/y in x) { qdel(y) } ; x = null } #define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); } #define QDEL_LIST_IN(L, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/______qdel_list_wrapper, L), time, TIMER_STOPPABLE) diff --git a/code/_helpers/_lists.dm b/code/_helpers/_lists.dm index 5f4cc4dd08..0d5500d41c 100644 --- a/code/_helpers/_lists.dm +++ b/code/_helpers/_lists.dm @@ -308,6 +308,11 @@ proc/listclearnulls(list/list) else L[key] = temp[key] +// Return a list of the values in an assoc list (including null) +/proc/list_values(var/list/L) + . = list() + for(var/e in L) + . += L[e] //Mergesort: divides up the list into halves to begin the sort /proc/sortKey(var/list/client/L, var/order = 1) diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm index 1926246856..e8ca671c11 100644 --- a/code/_helpers/turfs.dm +++ b/code/_helpers/turfs.dm @@ -38,4 +38,120 @@ var/pressure = environment ? environment.return_pressure() : 0 if(pressure < SOUND_MINIMUM_PRESSURE) return TRUE - return FALSE \ No newline at end of file + return FALSE + +/* + Turf manipulation +*/ + +//Returns an assoc list that describes how turfs would be changed if the +//turfs in turfs_src were translated by shifting the src_origin to the dst_origin +/proc/get_turf_translation(turf/src_origin, turf/dst_origin, list/turfs_src) + var/list/turf_map = list() + for(var/turf/source in turfs_src) + var/x_pos = (source.x - src_origin.x) + var/y_pos = (source.y - src_origin.y) + var/z_pos = (source.z - src_origin.z) + + var/turf/target = locate(dst_origin.x + x_pos, dst_origin.y + y_pos, dst_origin.z + z_pos) + if(!target) + error("Null turf in translation @ ([dst_origin.x + x_pos], [dst_origin.y + y_pos], [dst_origin.z + z_pos])") + turf_map[source] = target //if target is null, preserve that information in the turf map + + return turf_map + +/proc/translate_turfs(var/list/translation, var/area/base_area = null, var/turf/base_turf) + for(var/turf/source in translation) + + var/turf/target = translation[source] + + if(target) + if(base_area) ChangeArea(target, get_area(source)) + var/leave_turf = base_turf ? base_turf : get_base_turf_by_area(base_area ? base_area : source) + translate_turf(source, target, leave_turf) + if(base_area) ChangeArea(source, base_area) + + //change the old turfs (Currently done by translate_turf for us) + //for(var/turf/source in translation) + // source.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(source), 1, 1) + +// Parmaters for stupid historical reasons are: +// T - Origin +// B - Destination +/proc/translate_turf(var/turf/T, var/turf/B, var/turftoleave = null) + + //You can stay, though. + if(istype(T,/turf/space)) + error("Tried to translate a space turf: src=[log_info_line(T)] dst=[log_info_line(B)]") + return FALSE // TODO - Is this really okay to do nothing? + + var/turf/X //New Destination Turf + + //Are we doing shuttlework? Just to save another type check later. + var/shuttlework = 0 + + //Shuttle turfs handle their own fancy moving. + if(istype(T,/turf/simulated/shuttle)) + shuttlework = 1 + var/turf/simulated/shuttle/SS = T + if(!SS.landed_holder) SS.landed_holder = new(turf = SS) + X = SS.landed_holder.land_on(B) + + //Generic non-shuttle turf move. + else + var/old_dir1 = T.dir + var/old_icon_state1 = T.icon_state + var/old_icon1 = T.icon + var/old_underlays = T.underlays.Copy() + var/old_decals = T.decals ? T.decals.Copy() : null + + X = B.ChangeTurf(T.type) + X.set_dir(old_dir1) + X.icon_state = old_icon_state1 + X.icon = old_icon1 + X.copy_overlays(T, TRUE) + X.underlays = old_underlays + X.decals = old_decals + + //Move the air from source to dest + var/turf/simulated/ST = T + if(istype(ST) && ST.zone) + var/turf/simulated/SX = X + if(!SX.air) + SX.make_air() + SX.air.copy_from(ST.zone.air) + ST.zone.remove(ST) + + var/z_level_change = FALSE + if(T.z != X.z) + z_level_change = TRUE + + //Move the objects. Not forceMove because the object isn't "moving" really, it's supposed to be on the "same" turf. + for(var/obj/O in T) + if(O.simulated) + O.loc = X + O.update_light() + if(z_level_change) // The objects still need to know if their z-level changed. + O.onTransitZ(T.z, X.z) + + //Move the mobs unless it's an AI eye or other eye type. + for(var/mob/M in T) + if(isEye(M)) continue // If we need to check for more mobs, I'll add a variable + M.loc = X + + if(z_level_change) // Same goes for mobs. + M.onTransitZ(T.z, X.z) + + if(istype(M, /mob/living)) + var/mob/living/LM = M + LM.check_shadow() // Need to check their Z-shadow, which is normally done in forceMove(). + + if(shuttlework) + var/turf/simulated/shuttle/SS = T + SS.landed_holder.leave_turf(turftoleave) + else if(turftoleave) + T.ChangeTurf(turftoleave) + else + T.ChangeTurf(get_base_turf_by_area(T)) + + return TRUE diff --git a/code/_macros.dm b/code/_macros.dm index afff35b713..6893ebbb6f 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -25,6 +25,8 @@ #define qdel_null(x) if(x) { qdel(x) ; x = null } +#define sequential_id(key) uniqueness_repository.Generate(/datum/uniqueness_generator/id_sequential, key) + #define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id) #define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index eef7231eb2..b9ce4c7f5a 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -134,12 +134,6 @@ // A is a turf or is on a turf, or in something on a turf (pen in a box); but not something in something on a turf (pen in a box in a backpack) sdepth = A.storage_depth_turf() if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = src - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN if(A.Adjacent(src) || (W && W.attack_can_reach(src, A, W.reach)) ) // see adjacent.dm if(W) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) @@ -188,6 +182,9 @@ /mob/living/UnarmedAttack(var/atom/A, var/proximity_flag) + if(is_incorporeal()) + return 0 + if(!ticker) to_chat(src, "You cannot attack people before the game has started.") return 0 diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm index 45818e2339..b3d93dd8ec 100644 --- a/code/controllers/Processes/supply.dm +++ b/code/controllers/Processes/supply.dm @@ -1,8 +1,5 @@ -//Config stuff -#define SUPPLY_DOCKZ 2 //Z-level of the Dock. -#define SUPPLY_STATIONZ 1 //Z-level of the Station. -#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station -#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock + +// TODO - Refactor to use the Supply Subsystem (SSsupply) //Supply packs are in /code/datums/supplypacks //Computers are in /code/game/machinery/computer/supply.dm @@ -43,7 +40,7 @@ var/datum/controller/supply/supply_controller = new() var/list/adm_export_history = list() // Complete history of all crates sent back on the shuttle, for admin use //shuttle movement var/movetime = 1200 - var/datum/shuttle/ferry/supply/shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle var/list/material_points_conversion = list( // Any materials not named in this list are worth 0 points "phoron" = 5, "platinum" = 5 @@ -90,83 +87,98 @@ var/datum/controller/supply/supply_controller = new() //Selling /datum/controller/supply/proc/sell() - var/area/area_shuttle = shuttle.get_location_area() - if(!area_shuttle) - return + // Loop over each area in the supply shuttle + for(var/area/subarea in shuttle.shuttle_area) + callHook("sell_shuttle", list(subarea)); + for(var/atom/movable/MA in subarea) + if(MA.anchored) + continue - callHook("sell_shuttle", list(area_shuttle)); + var/datum/exported_crate/EC = new /datum/exported_crate() + EC.name = "\proper[MA.name]" + EC.value = 0 + EC.contents = list() + var/base_value = 0 - for(var/atom/movable/MA in area_shuttle) - if(MA.anchored) - continue + // Must be in a crate! + if(istype(MA,/obj/structure/closet/crate)) + var/obj/structure/closet/crate/CR = MA + callHook("sell_crate", list(CR, subarea)) - var/datum/exported_crate/EC = new /datum/exported_crate() - EC.name = "\proper[MA.name]" - EC.value = 0 - EC.contents = list() - var/base_value = 0 + points += CR.points_per_crate + if(CR.points_per_crate) + base_value = CR.points_per_crate + var/find_slip = 1 - // Must be in a crate! - if(istype(MA,/obj/structure/closet/crate)) - var/obj/structure/closet/crate/CR = MA - callHook("sell_crate", list(CR, area_shuttle)) + for(var/atom/A in CR) + EC.contents[++EC.contents.len] = list( + "object" = "\proper[A.name]", + "value" = 0, + "quantity" = 1 + ) - points += CR.points_per_crate - if(CR.points_per_crate) - base_value = CR.points_per_crate - var/find_slip = 1 + // Sell manifests + if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) + var/obj/item/weapon/paper/manifest/slip = A + if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense + points += points_per_slip + EC.contents[EC.contents.len]["value"] = points_per_slip + find_slip = 0 + continue - for(var/atom/A in CR) - EC.contents[++EC.contents.len] = list( - "object" = "\proper[A.name]", - "value" = 0, - "quantity" = 1 + // Sell phoron and platinum + if(istype(A, /obj/item/stack)) + var/obj/item/stack/P = A + if(material_points_conversion[P.get_material_name()]) + EC.contents[EC.contents.len]["value"] = P.get_amount() * material_points_conversion[P.get_material_name()] + EC.contents[EC.contents.len]["quantity"] = P.get_amount() + EC.value += EC.contents[EC.contents.len]["value"] + + //Sell spacebucks + if(istype(A, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/cashmoney = A + EC.contents[EC.contents.len]["value"] = cashmoney.worth * points_per_money + EC.contents[EC.contents.len]["quantity"] = cashmoney.worth + EC.value += EC.contents[EC.contents.len]["value"] + + + + // Make a log of it, but it wasn't shipped properly, and so isn't worth anything + else + EC.contents = list( + "error" = "Error: Product was improperly packaged. Payment rendered null under terms of agreement." ) - // Sell manifests - if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) - var/obj/item/weapon/paper/manifest/slip = A - if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense - points += points_per_slip - EC.contents[EC.contents.len]["value"] = points_per_slip - find_slip = 0 + exported_crates += EC + points += EC.value + EC.value += base_value + + // Duplicate the receipt for the admin-side log + var/datum/exported_crate/adm = new() + adm.name = EC.name + adm.value = EC.value + adm.contents = deepCopyList(EC.contents) + adm_export_history += adm + + qdel(MA) + +/datum/controller/supply/proc/get_clear_turfs() + var/list/clear_turfs = list() + + for(var/area/subarea in shuttle.shuttle_area) + for(var/turf/T in subarea) + if(T.density) + continue + var/occupied = 0 + for(var/atom/A in T.contents) + if(!A.simulated) continue + occupied = 1 + break + if(!occupied) + clear_turfs += T - // Sell phoron and platinum - if(istype(A, /obj/item/stack)) - var/obj/item/stack/P = A - if(material_points_conversion[P.get_material_name()]) - EC.contents[EC.contents.len]["value"] = P.get_amount() * material_points_conversion[P.get_material_name()] - EC.contents[EC.contents.len]["quantity"] = P.get_amount() - EC.value += EC.contents[EC.contents.len]["value"] - - //Sell spacebucks - if(istype(A, /obj/item/weapon/spacecash)) - var/obj/item/weapon/spacecash/cashmoney = A - EC.contents[EC.contents.len]["value"] = cashmoney.worth * points_per_money - EC.contents[EC.contents.len]["quantity"] = cashmoney.worth - EC.value += EC.contents[EC.contents.len]["value"] - - - - // Make a log of it, but it wasn't shipped properly, and so isn't worth anything - else - EC.contents = list( - "error" = "Error: Product was improperly packaged. Payment rendered null under terms of agreement." - ) - - exported_crates += EC - points += EC.value - EC.value += base_value - - // Duplicate the receipt for the admin-side log - var/datum/exported_crate/adm = new() - adm.name = EC.name - adm.value = EC.value - adm.contents = deepCopyList(EC.contents) - adm_export_history += adm - - qdel(MA) + return clear_turfs //Buying /datum/controller/supply/proc/buy() @@ -177,26 +189,9 @@ var/datum/controller/supply/supply_controller = new() if(!shoppinglist.len) return - var/orderedamount = shoppinglist.len - var/area/area_shuttle = shuttle.get_location_area() - if(!area_shuttle) - return - - var/list/clear_turfs = list() - - for(var/turf/T in area_shuttle) - if(T.density) - continue - var/contcount - for(var/atom/A in T.contents) - if(!A.simulated) - continue - contcount++ - if(contcount) - continue - clear_turfs += T + var/list/clear_turfs = get_clear_turfs() for(var/datum/supply_order/SO in shoppinglist) if(!clear_turfs.len) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 2af8467b98..dceabff846 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -31,6 +31,7 @@ var/list/gamemode_cache = list() var/allow_admin_jump = 1 // allows admin jumping var/allow_admin_spawning = 1 // allows admin item spawning var/allow_admin_rev = 1 // allows admin revives + var/pregame_time = 180 // pregame time in seconds var/vote_delay = 6000 // minimum time between voting sessions (deciseconds, 10 minute default) var/vote_period = 600 // length of voting period (deciseconds, default 1 minute) var/vote_autotransfer_initial = 108000 // Length of time before the first autotransfer vote is called @@ -420,6 +421,9 @@ var/list/gamemode_cache = list() if ("default_no_vote") config.vote_no_default = 1 + if ("pregame_time") + config.pregame_time = text2num(value) + if ("vote_delay") config.vote_delay = text2num(value) diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm index 2229c4febc..54f97e2060 100644 --- a/code/controllers/emergency_shuttle_controller.dm +++ b/code/controllers/emergency_shuttle_controller.dm @@ -5,7 +5,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle /datum/emergency_shuttle_controller - var/datum/shuttle/ferry/emergency/shuttle + var/datum/shuttle/autodock/ferry/emergency/shuttle // Set in shuttle_emergency.dm TODO - is it really? var/list/escape_pods var/launch_time //the time at which the shuttle will be launched @@ -36,8 +36,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle if (!shuttle.location) //leaving from the station //launch the pods! for (var/EP in escape_pods) - var/datum/shuttle/ferry/escape_pod/pod - if(istype(escape_pods[EP], /datum/shuttle/ferry/escape_pod)) + var/datum/shuttle/autodock/ferry/escape_pod/pod + if(istype(escape_pods[EP], /datum/shuttle/autodock/ferry/escape_pod)) pod = escape_pods[EP] else continue @@ -63,8 +63,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle //arm the escape pods if (evac) for (var/EP in escape_pods) - var/datum/shuttle/ferry/escape_pod/pod - if(istype(escape_pods[EP], /datum/shuttle/ferry/escape_pod)) + var/datum/shuttle/autodock/ferry/escape_pod/pod + if(istype(escape_pods[EP], /datum/shuttle/autodock/ferry/escape_pod)) pod = escape_pods[EP] else continue @@ -215,11 +215,11 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle //returns 1 if the shuttle is currently in transit (or just leaving) to the station /datum/emergency_shuttle_controller/proc/going_to_station() - return (!shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE) + return shuttle && (!shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE) //returns 1 if the shuttle is currently in transit (or just leaving) to centcom /datum/emergency_shuttle_controller/proc/going_to_centcom() - return (shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE) + return shuttle && (shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE) /datum/emergency_shuttle_controller/proc/get_status_panel_eta() diff --git a/code/controllers/subsystems/ai.dm b/code/controllers/subsystems/ai.dm index 8977818755..a111b83e43 100644 --- a/code/controllers/subsystems/ai.dm +++ b/code/controllers/subsystems/ai.dm @@ -25,7 +25,7 @@ SUBSYSTEM_DEF(ai) // var/mob/living/L = currentrun[currentrun.len] var/datum/ai_holder/A = currentrun[currentrun.len] --currentrun.len - if(!A || QDELETED(A)) // Doesn't exist or won't exist soon. + if(!A || QDELETED(A) || A.busy) // Doesn't exist or won't exist soon or not doing it this tick continue if(times_fired % 4 == 0 && A.holder.stat != DEAD) A.handle_strategicals() diff --git a/code/controllers/subsystems/inactivity.dm b/code/controllers/subsystems/inactivity.dm index 1affe905fd..7e97939fff 100644 --- a/code/controllers/subsystems/inactivity.dm +++ b/code/controllers/subsystems/inactivity.dm @@ -1,42 +1,58 @@ SUBSYSTEM_DEF(inactivity) - name = "AFK Kick" - wait = 600 - flags = SS_BACKGROUND | SS_NO_TICK_CHECK + name = "Inactivity" + wait = 1 MINUTE + flags = SS_NO_INIT | SS_BACKGROUND + var/tmp/list/client_list + var/number_kicked = 0 -/datum/controller/subsystem/inactivity/fire() - if(config.kick_inactive) - for(var/i in GLOB.clients) - var/client/C = i - if(C.is_afk(config.kick_inactive MINUTES) && !C.holder) // VOREStation Edit - Allow admins to idle - to_chat(C,"You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.") - var/information +/datum/controller/subsystem/inactivity/fire(resumed = FALSE) + if (!config.kick_inactive) + can_fire = FALSE + return + if (!resumed) + client_list = GLOB.clients.Copy() - if(C.mob) - if(ishuman(C.mob)) - var/job - var/mob/living/carbon/human/H = C.mob - var/datum/data/record/R = find_general_record("name", H.real_name) - if(R) - job = R.fields["real_rank"] - if(!job && H.mind) - job = H.mind.assigned_role - if(!job && H.job) - job = H.job - if(job) - information = " while [job]." + while(client_list.len) + var/client/C = client_list[client_list.len] + client_list.len-- + if(!C.holder && C.is_afk(config.kick_inactive MINUTES) && !isobserver(C.mob)) + + to_chat(C, "You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.") - else if(issilicon(C.mob)) - information = " while a silicon." - if(isAI(C.mob)) - var/mob/living/silicon/ai/A = C.mob - empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(A.loc) - global_announcer.autosay("[A] has been moved to intelligence storage.", "Artificial Intelligence Oversight") - A.clear_client() - information = " while an AI." + var/information + if(C.mob) + if(ishuman(C.mob)) + var/job + var/mob/living/carbon/human/H = C.mob + var/datum/data/record/R = find_general_record("name", H.real_name) + if(R) + job = R.fields["real_rank"] + if(!job && H.mind) + job = H.mind.assigned_role + if(!job && H.job) + job = H.job + if(job) + information = " while [job]." - var/adminlinks - adminlinks = " (JMP|CRYO)" + else if(issilicon(C.mob)) + information = " while a silicon." + if(isAI(C.mob)) + var/mob/living/silicon/ai/A = C.mob + empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(A.loc) + global_announcer.autosay("[A] has been moved to intelligence storage.", "Artificial Intelligence Oversight") + A.clear_client() + information = " while an AI." - log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob) + var/adminlinks + adminlinks = " (JMP|CRYO)" - qdel(C) + log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob) + + qdel(C) + number_kicked++ + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/inactivity/stat_entry() + ..("Kicked: [number_kicked]") diff --git a/code/controllers/subsystems/shuttles.dm b/code/controllers/subsystems/shuttles.dm index 61a4590890..35a93a5eac 100644 --- a/code/controllers/subsystems/shuttles.dm +++ b/code/controllers/subsystems/shuttles.dm @@ -1,6 +1,8 @@ // // SSshuttles subsystem - Handles initialization and processing of shuttles. // +// Also handles initialization and processing of overmap sectors. +// // This global variable exists for legacy support so we don't have to rename every shuttle_controller to SSshuttles yet. var/global/datum/controller/subsystem/shuttles/shuttle_controller @@ -13,71 +15,168 @@ SUBSYSTEM_DEF(shuttles) flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME - var/list/shuttles = list() // Maps shuttle tags to shuttle datums, so that they can be looked up. - var/list/process_shuttles = list() // Simple list of shuttles, for processing - var/list/current_run = list() // Shuttles remaining to process this fire() tick - var/list/docks_init_callbacks // List of callbacks to run when we finish setting up shuttle docks. - var/docks_initialized = FALSE + // TODO OVERMAP - These two are unused for now + var/overmap_halted = FALSE // Whether ships can move on the overmap; used for adminbus. + var/list/ships = list() // List of all ships. + + var/list/shuttles = list() // Maps shuttle tags to shuttle datums, so that they can be looked up. + var/list/process_shuttles = list() // Simple list of shuttles, for processing + + var/list/registered_shuttle_landmarks = list() // Maps shuttle landmark tags to instances + var/last_landmark_registration_time // world.time of most recent addition to registered_shuttle_landmarks + var/list/shuttle_logs = list() // (Not Implemented) Keeps records of shuttle movement, format is list(datum/shuttle = datum/shuttle_log) + var/list/shuttle_areas = list() // All the areas of all shuttles. + var/list/docking_registry = list() // Docking controller tag -> docking controller program, mostly for init purposes. + + var/list/landmarks_awaiting_sector = list() // Stores automatic landmarks that are waiting for a sector to finish loading. + var/list/landmarks_still_needed = list() // Stores landmark_tags that need to be assigned to the sector (landmark_tag = sector) when registered. + var/list/shuttles_to_initialize // A queue for shuttles to initialize at the appropriate time. + var/list/sectors_to_initialize // Used to find all sector objects at the appropriate time. + var/block_init_queue = TRUE // Block initialization of new shuttles/sectors + + var/tmp/list/current_run // Shuttles remaining to process this fire() tick + +/datum/controller/subsystem/shuttles/PreInit() + global.shuttle_controller = src // TODO - Remove this! Change everything to point at SSshuttles intead /datum/controller/subsystem/shuttles/Initialize(timeofday) - global.shuttle_controller = src - setup_shuttle_docks() - for(var/I in docks_init_callbacks) - var/datum/callback/cb = I - cb.InvokeAsync() - LAZYCLEARLIST(docks_init_callbacks) - docks_init_callbacks = null + last_landmark_registration_time = world.time + // Find all declared shuttle datums and initailize them. (Okay, queue them for initialization a few lines further down) + for(var/shuttle_type in subtypesof(/datum/shuttle)) // This accounts for most shuttles, though away maps can queue up more. + var/datum/shuttle/shuttle = shuttle_type + if(initial(shuttle.category) == shuttle_type) + continue // Its an "abstract class" datum, not for a real shuttle. + if(!initial(shuttle.defer_initialisation)) // Skip if it asks not to be initialized at startup. + LAZYDISTINCTADD(shuttles_to_initialize, shuttle_type) + block_init_queue = FALSE + process_init_queues() return ..() /datum/controller/subsystem/shuttles/fire(resumed = 0) - do_process_shuttles(resumed) - -/datum/controller/subsystem/shuttles/stat_entry() - var/msg = list() - msg += "AS:[shuttles.len]|" - msg += "PS:[process_shuttles.len]|" - ..(jointext(msg, null)) - -/datum/controller/subsystem/shuttles/proc/do_process_shuttles(resumed = 0) if (!resumed) src.current_run = process_shuttles.Copy() - var/list/current_run = src.current_run // Cache for sanic speed - while(current_run.len) - var/datum/shuttle/S = current_run[current_run.len] - current_run.len-- - if(istype(S) && !QDELETED(S)) - if(istype(S, /datum/shuttle/ferry)) // Ferry shuttles get special treatment - var/datum/shuttle/ferry/F = S - if(F.process_state || F.always_process) - F.process() - else - S.process() - else + var/list/working_shuttles = src.current_run // Cache for sanic speed + while(working_shuttles.len) + var/datum/shuttle/S = working_shuttles[working_shuttles.len] + working_shuttles.len-- + if(!istype(S) || QDELETED(S)) + error("Bad entry in SSshuttles.process_shuttles - [log_info_line(S)] ") process_shuttles -= S + continue + // NOTE - In old system, /datum/shuttle/ferry was processed only if (F.process_state || F.always_process) + if(S.process_state && (S.process(wait, times_fired, src) == PROCESS_KILL)) + process_shuttles -= S + if(MC_TICK_CHECK) return -// This should be called after all the machines and radio frequencies have been properly initialized -/datum/controller/subsystem/shuttles/proc/setup_shuttle_docks() - // Find all declared shuttle datums and initailize them. - for(var/shuttle_type in subtypesof(/datum/shuttle)) - var/datum/shuttle/shuttle = shuttle_type - if(initial(shuttle.category) == shuttle_type) - continue +/datum/controller/subsystem/shuttles/proc/process_init_queues() + if(block_init_queue) + return + initialize_shuttles() + initialize_sectors() + +// Initializes all shuttles in shuttles_to_initialize +/datum/controller/subsystem/shuttles/proc/initialize_shuttles() + var/list/shuttles_made = list() + for(var/shuttle_type in shuttles_to_initialize) + var/shuttle = initialize_shuttle(shuttle_type) + if(shuttle) + shuttles_made += shuttle + hook_up_motherships(shuttles_made) + shuttles_to_initialize = null + +/datum/controller/subsystem/shuttles/proc/initialize_sectors() + for(var/sector in sectors_to_initialize) + initialize_sector(sector) + sectors_to_initialize = null + +/datum/controller/subsystem/shuttles/proc/register_landmark(shuttle_landmark_tag, obj/effect/shuttle_landmark/shuttle_landmark) + if (registered_shuttle_landmarks[shuttle_landmark_tag]) + CRASH("Attempted to register shuttle landmark with tag [shuttle_landmark_tag], but it is already registered!") + if (istype(shuttle_landmark)) + registered_shuttle_landmarks[shuttle_landmark_tag] = shuttle_landmark + last_landmark_registration_time = world.time + + // TODO - Uncomment once overmap sectors are ported + //var/obj/effect/overmap/visitable/O = landmarks_still_needed[shuttle_landmark_tag] + //if(O) //These need to be added to sectors, which we handle. + // try_add_landmark_tag(shuttle_landmark_tag, O) + // landmarks_still_needed -= shuttle_landmark_tag + //else if(istype(shuttle_landmark, /obj/effect/shuttle_landmark/automatic)) //These find their sector automatically + // O = map_sectors["[shuttle_landmark.z]"] + // O ? O.add_landmark(shuttle_landmark, shuttle_landmark.shuttle_restricted) : (landmarks_awaiting_sector += shuttle_landmark) + +/datum/controller/subsystem/shuttles/proc/get_landmark(var/shuttle_landmark_tag) + return registered_shuttle_landmarks[shuttle_landmark_tag] + +//Checks if the given sector's landmarks have initialized; if so, registers them with the sector, if not, marks them for assignment after they come in. +//Also adds automatic landmarks that were waiting on their sector to spawn. +/datum/controller/subsystem/shuttles/proc/initialize_sector(obj/effect/overmap/visitable/given_sector) + return // TODO - Uncomment once overmap sectors are ported +// given_sector.populate_sector_objects() // This is a late init operation that sets up the sector's map_z and does non-overmap-related init tasks. + +// for(var/landmark_tag in given_sector.initial_generic_waypoints) +// if(!try_add_landmark_tag(landmark_tag, given_sector)) +// landmarks_still_needed[landmark_tag] = given_sector // Landmark isn't registered yet, queue it to be added once it is. + +// for(var/shuttle_name in given_sector.initial_restricted_waypoints) +// for(var/landmark_tag in given_sector.initial_restricted_waypoints[shuttle_name]) +// if(!try_add_landmark_tag(landmark_tag, given_sector)) +// landmarks_still_needed[landmark_tag] = given_sector // Landmark isn't registered yet, queue it to be added once it is. + +// var/landmarks_to_check = landmarks_awaiting_sector.Copy() +// for(var/thing in landmarks_to_check) +// var/obj/effect/shuttle_landmark/automatic/landmark = thing +// if(landmark.z in given_sector.map_z) +// given_sector.add_landmark(landmark, landmark.shuttle_restricted) +// landmarks_awaiting_sector -= landmark + +// TODO - Uncomment once overmap sectors are ported +//// Attempts to add a landmark instance with a sector (returns false if landmark isn't registered yet) +///datum/controller/subsystem/shuttles/proc/try_add_landmark_tag(landmark_tag, obj/effect/overmap/visitable/given_sector) +// var/obj/effect/shuttle_landmark/landmark = get_landmark(landmark_tag) +// if(!landmark) +// return + +// if(landmark.landmark_tag in given_sector.initial_generic_waypoints) +// given_sector.add_landmark(landmark) +// . = 1 +// for(var/shuttle_name in given_sector.initial_restricted_waypoints) +// if(landmark.landmark_tag in given_sector.initial_restricted_waypoints[shuttle_name]) +// given_sector.add_landmark(landmark, shuttle_name) +// . = 1 + +/datum/controller/subsystem/shuttles/proc/initialize_shuttle(var/shuttle_type) + var/datum/shuttle/shuttle = shuttle_type + if(initial(shuttle.category) != shuttle_type) // Skip if its an "abstract class" datum shuttle = new shuttle() - shuttle.init_docking_controllers() - shuttle.dock() //makes all shuttles docked to something at round start go into the docked state - CHECK_TICK + shuttle_areas |= shuttle.shuttle_area + log_debug("Initialized shuttle [shuttle] ([shuttle.type])") + return shuttle + // Historical note: No need to call shuttle.init_docking_controllers(), controllers register themselves + // and shuttles fetch refs in New(). Shuttles also dock() themselves in new if they want. - for(var/obj/machinery/embedded_controller/C in machines) - if(istype(C.program, /datum/computer/file/embedded_program/docking)) - C.program.tag = null //clear the tags, 'cause we don't need 'em anymore - docks_initialized = TRUE +// TODO - Leshana to hook up more of this when overmap is ported. +/datum/controller/subsystem/shuttles/proc/hook_up_motherships(shuttles_list) + for(var/datum/shuttle/S in shuttles_list) + if(S.mothershuttle && !S.motherdock) + var/datum/shuttle/mothership = shuttles[S.mothershuttle] + if(mothership) + S.motherdock = S.current_location.landmark_tag + mothership.shuttle_area |= S.shuttle_area + else + error("Shuttle [S] was unable to find mothership [mothership]!") -// Register a callback that will be invoked once the shuttles have been initialized -/datum/controller/subsystem/shuttles/proc/OnDocksInitialized(datum/callback/cb) - if(!docks_initialized) - LAZYADD(docks_init_callbacks, cb) - else - cb.InvokeAsync() +// Admin command to halt/resume overmap +// /datum/controller/subsystem/shuttles/proc/toggle_overmap(new_setting) +// if(overmap_halted == new_setting) +// return +// overmap_halted = !overmap_halted +// for(var/ship in ships) +// var/obj/effect/overmap/visitable/ship/ship_effect = ship +// overmap_halted ? ship_effect.halt() : ship_effect.unhalt() + +/datum/controller/subsystem/shuttles/stat_entry() + ..("Shuttles:[process_shuttles.len]/[shuttles.len], Ships:[ships.len], L:[registered_shuttle_landmarks.len][overmap_halted ? ", HALT" : ""]") diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 88fe9dbf1c..a35abf8c37 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -138,12 +138,8 @@ return /obj/effect/ebeam/deadly/Crossed(atom/A) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = A - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(A.is_incorporeal()) + return ..() A.ex_act(1) @@ -163,12 +159,8 @@ on_contact(A) /obj/effect/ebeam/reactive/Crossed(atom/A) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = A - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(A.is_incorporeal()) + return ..() on_contact(A) diff --git a/code/datums/observation/shuttle_added.dm b/code/datums/observation/shuttle_added.dm new file mode 100644 index 0000000000..dfd95170a0 --- /dev/null +++ b/code/datums/observation/shuttle_added.dm @@ -0,0 +1,22 @@ +// Observer Pattern Implementation: Shuttle Added +// Registration type: /datum/shuttle (register for the global event only) +// +// Raised when: After a shuttle is initialized. +// +// Arguments that the called proc should expect: +// /datum/shuttle/shuttle: the new shuttle + +GLOBAL_DATUM_INIT(shuttle_added, /decl/observ/shuttle_added, new) + +/decl/observ/shuttle_added + name = "Shuttle Added" + expected_type = /datum/shuttle + +/***************************** +* Shuttle Added Handling * +*****************************/ + +/datum/controller/subsystem/shuttles/initialize_shuttle() + . = ..() + if(.) + GLOB.shuttle_added.raise_event(.) \ No newline at end of file diff --git a/code/datums/observation/shuttle_moved.dm b/code/datums/observation/shuttle_moved.dm new file mode 100644 index 0000000000..35bff0d6b9 --- /dev/null +++ b/code/datums/observation/shuttle_moved.dm @@ -0,0 +1,38 @@ +// Observer Pattern Implementation: Shuttle Moved +// Registration type: /datum/shuttle/autodock +// +// Raised when: A shuttle has moved to a new landmark. +// +// Arguments that the called proc should expect: +// /datum/shuttle/shuttle: the shuttle moving +// /obj/effect/shuttle_landmark/old_location: the old location's shuttle landmark +// /obj/effect/shuttle_landmark/new_location: the new location's shuttle landmark + +// Observer Pattern Implementation: Shuttle Pre Move +// Registration type: /datum/shuttle/autodock +// +// Raised when: A shuttle is about to move to a new landmark. +// +// Arguments that the called proc should expect: +// /datum/shuttle/shuttle: the shuttle moving +// /obj/effect/shuttle_landmark/old_location: the old location's shuttle landmark +// /obj/effect/shuttle_landmark/new_location: the new location's shuttle landmark + +GLOBAL_DATUM_INIT(shuttle_moved_event, /decl/observ/shuttle_moved, new) + +/decl/observ/shuttle_moved + name = "Shuttle Moved" + expected_type = /datum/shuttle + +GLOBAL_DATUM_INIT(shuttle_pre_move_event, /decl/observ/shuttle_pre_move, new) + +/decl/observ/shuttle_pre_move + name = "Shuttle Pre Move" + expected_type = /datum/shuttle + +/***************** +* Shuttle Moved/Pre Move Handling * +*****************/ + +// Located in modules/shuttle/shuttle.dm +// Proc: /datum/shuttle/proc/attempt_move() \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index ac11cd2e4f..839ab27a31 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -62,8 +62,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station //////////// //SHUTTLES// //////////// -//shuttle areas must contain at least two areas in a subgroup if you want to move a shuttle from one -//place to another. Look at escape shuttle for example. +//Shuttles only need starting area, movement is handled by landmarks //All shuttles should now be under shuttle since we have smooth-wall code. /area/shuttle @@ -76,160 +75,55 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Arrival Shuttle" ambience = AMBIENCE_ARRIVALS -/area/shuttle/arrival/pre_game +/area/shuttle/supply + name = "\improper Supply Shuttle" icon_state = "shuttle2" -/area/shuttle/arrival/station - icon_state = "shuttle" - dynamic_lighting = 0 - ambience = AMBIENCE_ARRIVALS - /area/shuttle/escape name = "\improper Emergency Shuttle" music = "music/escape.ogg" -/area/shuttle/escape/station - name = "\improper Emergency Shuttle Station" - icon_state = "shuttle2" - dynamic_lighting = 0 - -/area/shuttle/escape/centcom - name = "\improper Emergency Shuttle CentCom" - icon_state = "shuttle" - -/area/shuttle/escape/transit // the area to pass through for 3 minute transit - name = "\improper Emergency Shuttle Transit" - icon_state = "shuttle" - /area/shuttle/escape_pod1 name = "\improper Escape Pod One" music = "music/escape.ogg" -/area/shuttle/escape_pod1/station - icon_state = "shuttle2" - -/area/shuttle/escape_pod1/centcom - icon_state = "shuttle" - -/area/shuttle/escape_pod1/transit - icon_state = "shuttle" - /area/shuttle/escape_pod2 name = "\improper Escape Pod Two" music = "music/escape.ogg" -/area/shuttle/escape_pod2/station - icon_state = "shuttle2" - -/area/shuttle/escape_pod2/centcom - icon_state = "shuttle" - -/area/shuttle/escape_pod2/transit - icon_state = "shuttle" - /area/shuttle/escape_pod3 name = "\improper Escape Pod Three" music = "music/escape.ogg" -/area/shuttle/escape_pod3/station - icon_state = "shuttle2" - -/area/shuttle/escape_pod3/centcom - icon_state = "shuttle" - -/area/shuttle/escape_pod3/transit - icon_state = "shuttle" - /area/shuttle/escape_pod4 name = "\improper Escape Pod Four" music = "music/escape.ogg" -/area/shuttle/escape_pod4/station - icon_state = "shuttle2" - -/area/shuttle/escape_pod4/centcom - icon_state = "shuttle" - -/area/shuttle/escape_pod4/transit - icon_state = "shuttle" - /area/shuttle/escape_pod5 name = "\improper Escape Pod Five" music = "music/escape.ogg" -/area/shuttle/escape_pod5/station - icon_state = "shuttle2" - -/area/shuttle/escape_pod5/centcom - icon_state = "shuttle" - -/area/shuttle/escape_pod5/transit - icon_state = "shuttle" - /area/shuttle/escape_pod6 name = "\improper Escape Pod Six" music = "music/escape.ogg" -/area/shuttle/escape_pod6/station - icon_state = "shuttle2" - -/area/shuttle/escape_pod6/centcom - icon_state = "shuttle" - -/area/shuttle/escape_pod6/transit - icon_state = "shuttle" - /area/shuttle/large_escape_pod1 name = "\improper Large Escape Pod One" music = "music/escape.ogg" -/area/shuttle/large_escape_pod1/station - icon_state = "shuttle2" - -/area/shuttle/large_escape_pod1/centcom - icon_state = "shuttle" - -/area/shuttle/large_escape_pod1/transit - icon_state = "shuttle" - /area/shuttle/large_escape_pod2 name = "\improper Large Escape Pod Two" music = "music/escape.ogg" -/area/shuttle/large_escape_pod2/station - icon_state = "shuttle2" - -/area/shuttle/large_escape_pod2/centcom - icon_state = "shuttle" - -/area/shuttle/large_escape_pod2/transit - icon_state = "shuttle" - /area/shuttle/cryo name = "\improper Cryogenic Storage" -/area/shuttle/cryo/station - icon_state = "shuttle2" - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/shuttle/cryo/centcom - icon_state = "shuttle" - -/area/shuttle/cryo/transit - icon_state = "shuttle" - /area/shuttle/mining name = "\improper Mining Elevator" music = "music/escape.ogg" dynamic_lighting = 0 base_turf = /turf/simulated/mineral/floor/ignore_mapgen -/area/shuttle/mining/station - icon_state = "shuttle2" - -/area/shuttle/mining/outpost - icon_state = "shuttle" - /area/shuttle/transport1/centcom icon_state = "shuttle" name = "\improper Transport Shuttle CentCom" @@ -286,54 +180,15 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "red" dynamic_lighting = 0 -/area/shuttle/trade/centcom - name = "\improper Trade Shuttle CentCom" - icon_state = "shuttlered" - -/area/shuttle/trade/station - name = "\improper Trade Shuttle" - icon_state = "shuttlered" - /area/shuttle/thunderdome name = "honk" -/area/shuttle/thunderdome/grnshuttle - name = "\improper Thunderdome GRN Shuttle" - icon_state = "green" - -/area/shuttle/thunderdome/grnshuttle/dome - name = "\improper GRN Shuttle" - icon_state = "shuttlegrn" - -/area/shuttle/thunderdome/grnshuttle/station - name = "\improper GRN Station" - icon_state = "shuttlegrn2" - -/area/shuttle/thunderdome/redshuttle - name = "\improper Thunderdome RED Shuttle" - icon_state = "red" - -/area/shuttle/thunderdome/redshuttle/dome - name = "\improper RED Shuttle" - icon_state = "shuttlered" - -/area/shuttle/thunderdome/redshuttle/station - name = "\improper RED Station" - icon_state = "shuttlered2" -// === Trying to remove these areas: - /area/shuttle/research name = "\improper Research Elevator" music = "music/escape.ogg" dynamic_lighting = 0 base_turf = /turf/simulated/mineral/floor/ignore_mapgen -/area/shuttle/research/station - icon_state = "shuttle2" - -/area/shuttle/research/outpost - icon_state = "shuttle" - /area/airtunnel1/ // referenced in airtunnel.dm:759 /area/dummy/ // Referenced in engine.dm:261 @@ -2040,17 +1895,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Cargo Mining Dock" icon_state = "mining" -/area/supply/station - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 - base_turf = /turf/space - -/area/supply/dock - name = "Supply Shuttle" - icon_state = "shuttle3" - requires_power = 0 - base_turf = /turf/space // SCIENCE diff --git a/code/game/area/Space Station 13 areas_vr.dm b/code/game/area/Space Station 13 areas_vr.dm index c03489b307..b937fec8b2 100644 --- a/code/game/area/Space Station 13 areas_vr.dm +++ b/code/game/area/Space Station 13 areas_vr.dm @@ -1,23 +1,8 @@ //TFF 28/8/19 - cleanup of areas placement - removes all but rogueminer_vr stuff. -/area/shuttle/belter/station - name = "Belter Shuttle Landed" +/area/shuttle/belter + name = "Belter Shuttle" icon_state = "shuttle2" - base_turf = /turf/simulated/floor/tiled/asteroid_steel/airless - -/area/shuttle/belter/belt //Don't use this one, use a subtype - name = "Belter Shuttle Holding Position" - icon_state = "shuttle2" - -//Placeholders -/area/shuttle/belter/belt/zone1 -/area/shuttle/belter/belt/zone2 -/area/shuttle/belter/belt/zone3 -/area/shuttle/belter/belt/zone4 - -/area/shuttle/belter/transit - name = "Belter Shuttle Warp" - icon_state = "shuttle" //Rouguelike Mining /area/asteroid/rogue @@ -28,22 +13,22 @@ /area/asteroid/rogue/zone1 name = "Asteroid Belt Zone 1" icon_state = "red2" - shuttle_area = /area/shuttle/belter/belt/zone1 + //shuttle_area = /area/shuttle/belter/belt/zone1 /area/asteroid/rogue/zone2 name = "Asteroid Belt Zone 2" icon_state = "blue2" - shuttle_area = /area/shuttle/belter/belt/zone2 + //shuttle_area = /area/shuttle/belter/belt/zone2 /area/asteroid/rogue/zone3 name = "Asteroid Belt Zone 3" icon_state = "blue2" - shuttle_area = /area/shuttle/belter/belt/zone3 + //shuttle_area = /area/shuttle/belter/belt/zone3 /area/asteroid/rogue/zone4 name = "Asteroid Belt Zone 4" icon_state = "red2" - shuttle_area = /area/shuttle/belter/belt/zone4 + //shuttle_area = /area/shuttle/belter/belt/zone4 /area/engineering/engine_gas name = "\improper Engine Gas Storage" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 69e0ee9d1b..450d82a0e8 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -71,6 +71,31 @@ power_change() // all machines set to current power level, also updates lighting icon return INITIALIZE_HINT_LATELOAD +// Changes the area of T to A. Do not do this manually. +// Area is expected to be a non-null instance. +/proc/ChangeArea(var/turf/T, var/area/A) + if(!istype(A)) + CRASH("Area change attempt failed: invalid area supplied.") + var/area/old_area = get_area(T) + if(old_area == A) + return + // NOTE: BayStation calles area.Exited/Entered for the TURF T. So far we don't do that.s + // NOTE: There probably won't be any atoms in these turfs, but just in case we should call these procs. + A.contents.Add(T) + if(old_area) + // Handle dynamic lighting update if + if(T.dynamic_lighting && old_area.dynamic_lighting != A.dynamic_lighting) + if(A.dynamic_lighting) + T.lighting_build_overlay() + else + T.lighting_clear_overlay() + for(var/atom/movable/AM in T) + old_area.Exited(AM, A) + for(var/atom/movable/AM in T) + A.Entered(AM, old_area) + for(var/obj/machinery/M in T) + M.power_change() + /area/proc/get_contents() return contents diff --git a/code/game/area/ss13_deprecated_areas.dm b/code/game/area/ss13_deprecated_areas.dm new file mode 100644 index 0000000000..b3b689f23d --- /dev/null +++ b/code/game/area/ss13_deprecated_areas.dm @@ -0,0 +1,164 @@ +// +// Shuttles formerly required at least two areas in a subgroup if you want to move a shuttle from one +// place to another. Since shuttles now used landmarks instead these areas are deprecated! +// They are left here for the moment in order to make existing maps loadable, but should be phased out. +// + +/area/shuttle/arrival/pre_game + icon_state = "shuttle2" + +/area/shuttle/arrival/station + icon_state = "shuttle" + dynamic_lighting = 0 + ambience = AMBIENCE_ARRIVALS + +/area/shuttle/escape/station + name = "\improper Emergency Shuttle Station" + icon_state = "shuttle2" + dynamic_lighting = 0 + +/area/shuttle/escape/centcom + name = "\improper Emergency Shuttle CentCom" + icon_state = "shuttle" + +/area/shuttle/escape/transit // the area to pass through for 3 minute transit + name = "\improper Emergency Shuttle Transit" + icon_state = "shuttle" + +/area/shuttle/escape_pod1/station + icon_state = "shuttle2" + +/area/shuttle/escape_pod1/centcom + icon_state = "shuttle" + +/area/shuttle/escape_pod1/transit + icon_state = "shuttle" + +/area/shuttle/escape_pod2/station + icon_state = "shuttle2" + +/area/shuttle/escape_pod2/centcom + icon_state = "shuttle" + +/area/shuttle/escape_pod2/transit + icon_state = "shuttle" + +/area/shuttle/escape_pod3/station + icon_state = "shuttle2" + +/area/shuttle/escape_pod3/centcom + icon_state = "shuttle" + +/area/shuttle/escape_pod3/transit + icon_state = "shuttle" + +/area/shuttle/escape_pod4/station + icon_state = "shuttle2" + +/area/shuttle/escape_pod4/centcom + icon_state = "shuttle" + +/area/shuttle/escape_pod4/transit + icon_state = "shuttle" + +/area/shuttle/escape_pod5/station + icon_state = "shuttle2" + +/area/shuttle/escape_pod5/centcom + icon_state = "shuttle" + +/area/shuttle/escape_pod5/transit + icon_state = "shuttle" + +/area/shuttle/escape_pod6/station + icon_state = "shuttle2" + +/area/shuttle/escape_pod6/centcom + icon_state = "shuttle" + +/area/shuttle/escape_pod6/transit + icon_state = "shuttle" + +/area/shuttle/large_escape_pod1/station + icon_state = "shuttle2" + +/area/shuttle/large_escape_pod1/centcom + icon_state = "shuttle" + +/area/shuttle/large_escape_pod1/transit + icon_state = "shuttle" + +/area/shuttle/large_escape_pod2/station + icon_state = "shuttle2" + +/area/shuttle/large_escape_pod2/centcom + icon_state = "shuttle" + +/area/shuttle/large_escape_pod2/transit + icon_state = "shuttle" + +/area/shuttle/cryo/station + icon_state = "shuttle2" + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/shuttle/cryo/centcom + icon_state = "shuttle" + +/area/shuttle/cryo/transit + icon_state = "shuttle" + +/area/shuttle/mining/station + icon_state = "shuttle2" + +/area/shuttle/mining/outpost + icon_state = "shuttle" + +/area/shuttle/trade/centcom + name = "\improper Trade Shuttle CentCom" + icon_state = "shuttlered" + +/area/shuttle/trade/station + name = "\improper Trade Shuttle" + icon_state = "shuttlered" + +/area/shuttle/thunderdome/grnshuttle + name = "\improper Thunderdome GRN Shuttle" + icon_state = "green" + +/area/shuttle/thunderdome/grnshuttle/dome + name = "\improper GRN Shuttle" + icon_state = "shuttlegrn" + +/area/shuttle/thunderdome/grnshuttle/station + name = "\improper GRN Station" + icon_state = "shuttlegrn2" + +/area/shuttle/thunderdome/redshuttle + name = "\improper Thunderdome RED Shuttle" + icon_state = "red" + +/area/shuttle/thunderdome/redshuttle/dome + name = "\improper RED Shuttle" + icon_state = "shuttlered" + +/area/shuttle/thunderdome/redshuttle/station + name = "\improper RED Station" + icon_state = "shuttlered2" + +/area/shuttle/research/station + icon_state = "shuttle2" + +/area/shuttle/research/outpost + icon_state = "shuttle" + +/area/supply/station + name = "Supply Shuttle" + icon_state = "shuttle3" + requires_power = 0 + base_turf = /turf/space + +/area/supply/dock + name = "Supply Shuttle" + icon_state = "shuttle3" + requires_power = 0 + base_turf = /turf/space diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 87035942c4..6b206c6d02 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -519,6 +519,9 @@ return TRUE return FALSE +/atom/proc/is_incorporeal() + return FALSE + /atom/proc/drop_location() var/atom/L = loc if(!L) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index c8f0b44c3d..37714ea745 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -453,7 +453,7 @@ if(z in using_map.sealed_levels) return - if(config.use_overmap) + if(using_map.use_overmap) overmap_spacetravel(get_turf(src), src) return diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 633b1f4d02..7ce4b2e86d 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -132,22 +132,6 @@ anchored = 1.0 var/spawnable = null -/obj/effect/gateway/Bumped(mob/M as mob|obj) - spawn(0) - return - return - -/obj/effect/gateway/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN - spawn(0) - return - return - /obj/effect/gateway/active light_range=5 light_color="#ff0000" @@ -176,12 +160,8 @@ qdel(src) /obj/effect/gateway/active/Crossed(var/atom/A) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = A - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(A.is_incorporeal()) + return if(!istype(A, /mob/living)) return diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 73399e7269..3444372838 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -48,8 +48,9 @@ var/global/datum/controller/gameticker/ticker send2mainirc("Server lobby is loaded and open at byond://[config.serverurl ? config.serverurl : (config.server ? config.server : "[world.address]:[world.port]")]") + pregame_timeleft = config.pregame_time + do - pregame_timeleft = 180 to_chat(world, "Welcome to the pregame lobby!") to_chat(world, "Please set up your character and select ready. The round will start in [pregame_timeleft] seconds.") while(current_state == GAME_STATE_PREGAME) diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm index 9197f37952..e1dddbbeda 100644 --- a/code/game/machinery/computer/supply.dm +++ b/code/game/machinery/computer/supply.dm @@ -56,7 +56,7 @@ var/orders[0] var/receipts[0] - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle = supply_controller.shuttle if(shuttle) if(shuttle.has_arrive_time()) shuttle_status["location"] = "In transit" @@ -66,8 +66,8 @@ else shuttle_status["time"] = 0 if(shuttle.at_station()) - if(shuttle.docking_controller) - switch(shuttle.docking_controller.get_docking_status()) + if(shuttle.shuttle_docking_controller) + switch(shuttle.shuttle_docking_controller.get_docking_status()) if("docked") shuttle_status["location"] = "Docked" shuttle_status["mode"] = SUP_SHUTTLE_DOCKED @@ -192,7 +192,7 @@ if(!supply_controller) to_world_log("## ERROR: The supply_controller datum is missing.") return - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle = supply_controller.shuttle if (!shuttle) to_world_log("## ERROR: The supply shuttle datum is missing.") return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a7afa1f9a5..bd1d663720 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -178,6 +178,14 @@ icon = 'icons/obj/doors/Doorext.dmi' assembly_type = /obj/structure/door_assembly/door_assembly_ext +/obj/machinery/door/airlock/external/glass/bolted + icon_state = "door_locked" // So it looks visibly bolted in map editor + locked = 1 + +// For convenience in making docking ports: one that is pre-bolted with frequency set! +/obj/machinery/door/airlock/external/glass/bolted/cycling + frequency = 1379 + /obj/machinery/door/airlock/glass_external name = "External Airlock" icon = 'icons/obj/doors/Doorextglass.dmi' diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 0f8b797289..b15d5afd97 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -2,6 +2,7 @@ /obj/machinery/embedded_controller/radio/airlock // Setup parameters only radio_filter = RADIO_AIRLOCK + program = /datum/computer/file/embedded_program/airlock var/tag_exterior_door var/tag_interior_door var/tag_airpump @@ -11,11 +12,22 @@ var/tag_airlock_mech_sensor var/tag_shuttle_mech_sensor var/tag_secure = 0 + var/list/dummy_terminals = list() var/cycle_to_external_air = 0 -/obj/machinery/embedded_controller/radio/airlock/Initialize() - . = ..() - program = new/datum/computer/file/embedded_program/airlock(src) +/obj/machinery/embedded_controller/radio/airlock/Destroy() + // TODO - Leshana - Implement dummy terminals + //for(var/thing in dummy_terminals) + // var/obj/machinery/dummy_airlock_controller/dummy = thing + // dummy.master_controller = null + //dummy_terminals.Cut() + return ..() + +/obj/machinery/embedded_controller/radio/airlock/CanUseTopic(var/mob/user) + if(!allowed(user)) + return min(STATUS_UPDATE, ..()) + else + return ..() //Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller @@ -37,43 +49,20 @@ if (!ui) ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/Topic(href, href_list) - if(..()) + if((. = ..())) return - usr.set_machine(src) - src.add_fingerprint(usr) - - var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks - if("cycle_ext") - clean = 1 - if("cycle_int") - clean = 1 - if("force_ext") - clean = 1 - if("force_int") - clean = 1 - if("abort") - clean = 1 - if("purge") - clean = 1 - if("secure") - clean = 1 - - if(clean) - program.receive_user_command(href_list["command"]) + if("cycle_ext", "cycle_int", "force_ext", "force_int", "abort", "purge", "secure") + program.receive_user_command(href_list["command"]) return 1 - //Airlock controller for airlock control - most airlocks on the station use this /obj/machinery/embedded_controller/radio/airlock/airlock_controller name = "Airlock Controller" @@ -90,23 +79,16 @@ ) ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/airlock/airlock_controller/Topic(href, href_list) - if(..()) + if((. = ..())) return - usr.set_machine(src) - src.add_fingerprint(usr) - var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks if("cycle_ext") @@ -125,7 +107,6 @@ return 1 - //Access controller for door control - used in virology and the like /obj/machinery/embedded_controller/radio/airlock/access_controller icon = 'icons/obj/airlock_machines.dmi' @@ -154,23 +135,16 @@ ) ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/airlock/access_controller/Topic(href, href_list) - if(..()) + if((. = ..())) return - usr.set_machine(src) - src.add_fingerprint(usr) - var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks if("cycle_ext_door") diff --git a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm new file mode 100644 index 0000000000..d2f9a410a2 --- /dev/null +++ b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm @@ -0,0 +1,51 @@ +// Provides remote access to a controller (since they must be unique). +/obj/machinery/dummy_airlock_controller + name = "airlock control terminal" + icon = 'icons/obj/airlock_machines.dmi' + icon_state = "airlock_control_standby" + layer = ABOVE_OBJ_LAYER + var/id_tag + + var/datum/topic_state/remote/remote_state + var/obj/machinery/embedded_controller/radio/airlock/master_controller + +/obj/machinery/dummy_airlock_controller/process() + if(master_controller) + appearance = master_controller + . = ..() + +/obj/machinery/dummy_airlock_controller/Initialize() + . = ..() + if(id_tag) + for(var/obj/machinery/embedded_controller/radio/airlock/_master in SSmachines.machinery) + if(_master.id_tag == id_tag) + master_controller = _master + master_controller.dummy_terminals += src + break + if(!master_controller) + qdel(src) + else + remote_state = new /datum/topic_state/remote(src, master_controller) + +/obj/machinery/dummy_airlock_controller/Destroy() + if(master_controller) + master_controller.dummy_terminals -= src + if(remote_state) + qdel(remote_state) + remote_state = null + return ..() + +/obj/machinery/dummy_airlock_controller/interface_interact(var/mob/user) + open_remote_ui(user) + return TRUE + +/obj/machinery/dummy_airlock_controller/proc/open_remote_ui(var/mob/user) + if(master_controller) + appearance = master_controller + return master_controller.ui_interact(user, state = remote_state) + +/obj/machinery/dummy_airlock_controller/powered(var/chan = -1, var/area/check_area = null) + if(master_controller) + var/area/A = get_area(master_controller) + return master_controller.powered(chan, A) + return ..() diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index fa8398c3d7..4d5048ad6d 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -1,8 +1,17 @@ +/* + * NOTE - This file defines both these datums: Yes, you read that right. Its confusing. Lets try and break it down. + * /datum/computer/file/embedded_program/docking/airlock + * - A docking controller for an airlock based docking port + * /datum/computer/file/embedded_program/airlock/docking + * - An extension to the normal airlock program allows disabling of the regular airlock functions when docking +*/ + //a docking port based on an airlock /obj/machinery/embedded_controller/radio/airlock/docking_port name = "docking port controller" var/datum/computer/file/embedded_program/airlock/docking/airlock_program var/datum/computer/file/embedded_program/docking/airlock/docking_program + var/display_name // For mappers to override docking_program.display_name (how would it show up on docking monitoring program) tag_secure = 1 /obj/machinery/embedded_controller/radio/airlock/docking_port/Initialize() @@ -10,9 +19,25 @@ airlock_program = new/datum/computer/file/embedded_program/airlock/docking(src) docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program) program = docking_program + if(display_name) + docking_program.display_name = display_name + +/obj/machinery/embedded_controller/radio/airlock/docking_port/attackby(obj/item/W, mob/user) + if(istype(W,/obj/item/device/multitool)) //give them part of code, would take few tries to get full + var/datum/computer/file/embedded_program/docking/airlock/docking_program = program + var/code = docking_program.docking_codes + if(!code) + code = "N/A" + else + code = stars(code) + to_chat(user, "[W]'s screen displays '[code]'") + else + ..() /obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] + var/datum/computer/file/embedded_program/docking/airlock/docking_program = program + var/datum/computer/file/embedded_program/airlock/docking/airlock_program = docking_program.airlock_program data = list( "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]), @@ -22,6 +47,8 @@ "docking_status" = docking_program.get_docking_status(), "airlock_disabled" = !(docking_program.undocked() || docking_program.override_enabled), "override_enabled" = docking_program.override_enabled, + "docking_codes" = docking_program.docking_codes, + "name" = docking_program.get_name() ) ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -33,12 +60,9 @@ ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/airlock/docking_port/Topic(href, href_list) - if(..()) + if((. = ..())) return - usr.set_machine(src) - src.add_fingerprint(usr) - var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks if("cycle_ext") @@ -60,11 +84,13 @@ return 1 - +/////////////////////////////////////////////////////////////////////////////// //A docking controller for an airlock based docking port +// /datum/computer/file/embedded_program/docking/airlock var/datum/computer/file/embedded_program/airlock/docking/airlock_program + /datum/computer/file/embedded_program/docking/airlock/New(var/obj/machinery/embedded_controller/M, var/datum/computer/file/embedded_program/airlock/docking/A) ..(M) airlock_program = A @@ -76,10 +102,10 @@ disable_override() else enable_override() - return + return TRUE - ..(command) - airlock_program.receive_user_command(command) //pass along to subprograms + . = ..(command) + . = airlock_program.receive_user_command(command) || . //pass along to subprograms; bypass shortcircuit /datum/computer/file/embedded_program/docking/airlock/process() airlock_program.process() @@ -91,7 +117,7 @@ //tell the docking port to start getting ready for docking - e.g. pressurize /datum/computer/file/embedded_program/docking/airlock/prepare_for_docking() - airlock_program.begin_cycle_in() + airlock_program.begin_dock_cycle() //are we ready for docking? /datum/computer/file/embedded_program/docking/airlock/ready_for_docking() @@ -99,14 +125,14 @@ //we are docked, open the doors or whatever. /datum/computer/file/embedded_program/docking/airlock/finish_docking() - airlock_program.enable_mech_regulators() + airlock_program.enable_mech_regulation() airlock_program.open_doors() //tell the docking port to start getting ready for undocking - e.g. close those doors. /datum/computer/file/embedded_program/docking/airlock/prepare_for_undocking() airlock_program.stop_cycling() airlock_program.close_doors() - airlock_program.disable_mech_regulators() + airlock_program.disable_mech_regulation() //are we ready for undocking? /datum/computer/file/embedded_program/docking/airlock/ready_for_undocking() @@ -114,20 +140,22 @@ var/int_closed = airlock_program.check_interior_door_secured() return (ext_closed || int_closed) +/////////////////////////////////////////////////////////////////////////////// //An airlock controller to be used by the airlock-based docking port controller. //Same as a regular airlock controller but allows disabling of the regular airlock functions when docking +// /datum/computer/file/embedded_program/airlock/docking var/datum/computer/file/embedded_program/docking/airlock/master_prog +/datum/computer/file/embedded_program/airlock/docking/Destroy() + if(master_prog) + master_prog.airlock_program = null + master_prog = null + return ..() + /datum/computer/file/embedded_program/airlock/docking/receive_user_command(command) if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled - ..(command) - -/datum/computer/file/embedded_program/airlock/docking/proc/enable_mech_regulators() - enable_mech_regulation() - -/datum/computer/file/embedded_program/airlock/docking/proc/disable_mech_regulators() - disable_mech_regulation() + return ..(command) /datum/computer/file/embedded_program/airlock/docking/proc/open_doors() toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "open") diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index 4b6917ff71..0a82ca7aaf 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -2,21 +2,15 @@ //this is the master controller, that things will try to dock with. /obj/machinery/embedded_controller/radio/docking_port_multi name = "docking port controller" - + program = /datum/computer/file/embedded_program/docking/multi var/child_tags_txt var/child_names_txt var/list/child_names = list() - var/datum/computer/file/embedded_program/docking/multi/docking_program - /obj/machinery/embedded_controller/radio/docking_port_multi/Initialize() . = ..() - docking_program = new/datum/computer/file/embedded_program/docking/multi(src) - program = docking_program - var/list/names = splittext(child_names_txt, ";") var/list/tags = splittext(child_tags_txt, ";") - if (names.len == tags.len) for (var/i = 1; i <= tags.len; i++) child_names[tags[i]] = names[i] @@ -24,6 +18,7 @@ /obj/machinery/embedded_controller/radio/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] + var/datum/computer/file/embedded_program/docking/multi/docking_program = program // Cast to proper type var/list/airlocks[child_names.len] var/i = 1 @@ -44,24 +39,21 @@ ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/docking_port_multi/Topic(href, href_list) - return + return 1 // Apparently we swallow all input (this is corrected legacy code) //a docking port based on an airlock +// This is the actual controller that will be commanded by the master defined above /obj/machinery/embedded_controller/radio/airlock/docking_port_multi name = "docking port controller" + program = /datum/computer/file/embedded_program/airlock/multi_docking var/master_tag //for mapping - var/datum/computer/file/embedded_program/airlock/multi_docking/airlock_program tag_secure = 1 -/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Initialize() - . = ..() - airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src) - program = airlock_program - /obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] + var/datum/computer/file/embedded_program/airlock/multi_docking/airlock_program // Cast to proper type data = list( "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]), @@ -82,12 +74,9 @@ ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Topic(href, href_list) - if(..()) + if((. = ..())) return - usr.set_machine(src) - src.add_fingerprint(usr) - var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks if("cycle_ext") diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 5ebbac93ae..dc02084f98 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -52,8 +52,8 @@ tag_interior_door = controller.tag_interior_door? controller.tag_interior_door : "[id_tag]_inner" tag_airpump = controller.tag_airpump? controller.tag_airpump : "[id_tag]_pump" tag_chamber_sensor = controller.tag_chamber_sensor? controller.tag_chamber_sensor : "[id_tag]_sensor" - tag_exterior_sensor = controller.tag_exterior_sensor - tag_interior_sensor = controller.tag_interior_sensor + tag_exterior_sensor = controller.tag_exterior_sensor || "[id_tag]_exterior_sensor" + tag_interior_sensor = controller.tag_interior_sensor || "[id_tag]_interior_sensor" tag_airlock_mech_sensor = controller.tag_airlock_mech_sensor? controller.tag_airlock_mech_sensor : "[id_tag]_airlock_mech" tag_shuttle_mech_sensor = controller.tag_shuttle_mech_sensor? controller.tag_shuttle_mech_sensor : "[id_tag]_shuttle_mech" memory["secure"] = controller.tag_secure @@ -117,6 +117,7 @@ /datum/computer/file/embedded_program/airlock/receive_user_command(command) var/shutdown_pump = 0 + . = TRUE switch(command) if("cycle_ext") //If airlock is already cycled in this direction, just toggle the doors. @@ -163,6 +164,8 @@ else signalDoor(tag_interior_door, "unlock") signalDoor(tag_exterior_door, "unlock") + else + . = FALSE if(shutdown_pump) signalPump(tag_airpump, 0) //send a signal to stop pressurizing @@ -273,6 +276,9 @@ target_state = TARGET_INOPEN memory["purge"] = cycle_to_external_air +/datum/computer/file/embedded_program/airlock/proc/begin_dock_cycle() + state = STATE_IDLE + target_state = TARGET_INOPEN /datum/computer/file/embedded_program/airlock/proc/begin_cycle_out() state = STATE_IDLE target_state = TARGET_OUTOPEN diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm index 2665fc231c..44a34fddec 100644 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ b/code/game/machinery/embedded_controller/docking_program.dm @@ -12,51 +12,51 @@ /* *** STATE TABLE *** - + MODE_CLIENT|STATE_UNDOCKED sent a request for docking and now waiting for a reply. MODE_CLIENT|STATE_DOCKING server told us they are OK to dock, waiting for our docking port to be ready. MODE_CLIENT|STATE_DOCKED idle - docked as client. MODE_CLIENT|STATE_UNDOCKING we are either waiting for our docking port to be ready or for the server to give us the OK to finish undocking. - + MODE_SERVER|STATE_UNDOCKED should never happen. MODE_SERVER|STATE_DOCKING someone requested docking, we are waiting for our docking port to be ready. MODE_SERVER|STATE_DOCKED idle - docked as server MODE_SERVER|STATE_UNDOCKING client requested undocking, we are waiting for our docking port to be ready. - + MODE_NONE|STATE_UNDOCKED idle - not docked. MODE_NONE|anything else should never happen. - + *** Docking Signals *** - + Docking Client sends request_dock Server sends confirm_dock to say that yes, we will serve your request When client is ready, sends confirm_dock Server sends confirm_dock back to indicate that docking is complete - + Undocking Client sends request_undock When client is ready, sends confirm_undock Server sends confirm_undock back to indicate that docking is complete - + Note that in both cases each side exchanges confirm_dock before the docking operation is considered done. - The client first sends a confirm message to indicate it is ready, and then finally the server will send it's + The client first sends a confirm message to indicate it is ready, and then finally the server will send it's confirm message to indicate that the operation is complete. - + Note also that when docking, the server sends an additional confirm message. This is because before docking, the server and client do not have a defined relationship. Before undocking, the server and client are already related to each other, thus the extra confirm message is not needed. - + *** Override, what is it? *** - + The purpose of enabling the override is to prevent the docking program from automatically doing things with the docking port when docking or undocking. Maybe the shuttle is full of plamsa/phoron for some reason, and you don't want the door to automatically open, or the airlock to cycle. This means that the prepare_for_docking/undocking and finish_docking/undocking procs don't get called. - + The docking controller will still check the state of the docking port, and thus prevent the shuttle from launching unless they force the launch (handling forced - launches is not the docking controller's responsibility). In this case it is up to the players to manually get the docking port into a good state to undock + launches is not the docking controller's responsibility). In this case it is up to the players to manually get the docking port into a good state to undock (which usually just means closing and locking the doors). - + In line with this, docking controllers should prevent players from manually doing things when the override is NOT enabled. */ @@ -67,27 +67,31 @@ var/control_mode = MODE_NONE var/response_sent = 0 //so we don't spam confirmation messages var/resend_counter = 0 //for periodically resending confirmation messages in case they are missed - + var/override_enabled = 0 //when enabled, do not open/close doors or cycle airlocks and wait for the player to do it manually var/received_confirm = 0 //for undocking, whether the server has recieved a confirmation from the client + var/docking_codes //would only allow docking when receiving signal with these, if set + var/display_name //Override the name shown on docking monitoring program; defaults to area name + coordinates if unset /datum/computer/file/embedded_program/docking/New() ..() - var/datum/existing = locate(id_tag) //in case a datum already exists with our tag - if(existing) - existing.tag = null //take it from them - - tag = id_tag //Greatly simplifies shuttle initialization + if(id_tag) + if(SSshuttles.docking_registry[id_tag]) + crash_with("Docking controller tag [id_tag] had multiple associated programs.") + SSshuttles.docking_registry[id_tag] = src +/datum/computer/file/embedded_program/docking/Destroy() + SSshuttles.docking_registry -= id_tag + return ..() /datum/computer/file/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param) var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id var/command = signal.data["command"] var/recipient = signal.data["recipient"] //the intended recipient of the docking signal - + if (recipient != id_tag) return //this signal is not for us - + switch (command) if ("confirm_dock") if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target) @@ -95,7 +99,7 @@ broadcast_docking_status() if (!override_enabled) prepare_for_docking() - + else if (control_mode == MODE_CLIENT && dock_state == STATE_DOCKING && receive_tag == tag_target) dock_state = STATE_DOCKED broadcast_docking_status() @@ -104,19 +108,27 @@ response_sent = 0 else if (control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process received_confirm = 1 - + if ("request_dock") if (control_mode == MODE_NONE && dock_state == STATE_UNDOCKED) + + tag_target = receive_tag + + if(docking_codes) + var/code = signal.data["code"] + if(code != docking_codes) + testing("Controller [id_tag] got request_dock but code:[code] != docking_codes:[docking_codes]") + return + control_mode = MODE_SERVER - dock_state = STATE_DOCKING broadcast_docking_status() - - tag_target = receive_tag + + if (!override_enabled) prepare_for_docking() send_docking_command(tag_target, "confirm_dock") //acknowledge the request - + if ("confirm_undock") if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target) if (!override_enabled) @@ -129,7 +141,7 @@ if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target) dock_state = STATE_UNDOCKING broadcast_docking_status() - + if (!override_enabled) prepare_for_undocking() @@ -145,38 +157,38 @@ if (!response_sent) send_docking_command(tag_target, "confirm_dock") //tell the server we're ready response_sent = 1 - + else if (control_mode == MODE_SERVER && received_confirm) send_docking_command(tag_target, "confirm_dock") //tell the client we are done docking. - + dock_state = STATE_DOCKED broadcast_docking_status() - + if (!override_enabled) finish_docking() //server done docking! response_sent = 0 received_confirm = 0 - + if (STATE_UNDOCKING) if (ready_for_undocking()) if (control_mode == MODE_CLIENT) if (!response_sent) send_docking_command(tag_target, "confirm_undock") //tell the server we are OK to undock. response_sent = 1 - + else if (control_mode == MODE_SERVER && received_confirm) send_docking_command(tag_target, "confirm_undock") //tell the client we are done undocking. if (!override_enabled) finish_undocking() reset() //server is done undocking! - + if (response_sent || resend_counter > 0) resend_counter++ - + if (resend_counter >= MESSAGE_RESEND_TIME || (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)) response_sent = 0 resend_counter = 0 - + //handle invalid states if (control_mode == MODE_NONE && dock_state != STATE_UNDOCKED) if (tag_target) @@ -189,22 +201,22 @@ /datum/computer/file/embedded_program/docking/proc/initiate_docking(var/target) if (dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake return - + tag_target = target control_mode = MODE_CLIENT - + send_docking_command(tag_target, "request_dock") /datum/computer/file/embedded_program/docking/proc/initiate_undocking() if (dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking return - + dock_state = STATE_UNDOCKING broadcast_docking_status() - + if (!override_enabled) prepare_for_undocking() - + send_docking_command(tag_target, "request_undock") //tell the docking port to start getting ready for docking - e.g. pressurize @@ -240,7 +252,7 @@ /datum/computer/file/embedded_program/docking/proc/reset() dock_state = STATE_UNDOCKED broadcast_docking_status() - + control_mode = MODE_NONE tag_target = null response_sent = 0 @@ -267,6 +279,7 @@ signal.data["tag"] = id_tag signal.data["command"] = command signal.data["recipient"] = recipient + signal.data["code"] = docking_codes post_signal(signal) /datum/computer/file/embedded_program/docking/proc/broadcast_docking_status() @@ -283,6 +296,8 @@ if (STATE_UNDOCKING) return "undocking" if (STATE_DOCKED) return "docked" +/datum/computer/file/embedded_program/docking/proc/get_name() + return display_name ? display_name : "[get_area(master)] ([master.x], [master.y])" #undef STATE_UNDOCKED #undef STATE_DOCKING diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 17bf13181a..67d8dc4a7f 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -1,18 +1,20 @@ /obj/machinery/embedded_controller - var/datum/computer/file/embedded_program/program //the currently executing program - name = "Embedded Controller" anchored = 1 - use_power = 1 idle_power_usage = 10 - + var/datum/computer/file/embedded_program/program //the currently executing program var/on = 1 -obj/machinery/embedded_controller/radio/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) - ..() +/obj/machinery/embedded_controller/Initialize() + if(ispath(program)) + program = new program(src) + return ..() + +/obj/machinery/embedded_controller/Destroy() + if(istype(program)) + qdel(program) // the program will clear the ref in its Destroy + return ..() /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) return 0 @@ -24,6 +26,17 @@ obj/machinery/embedded_controller/radio/Destroy() program.receive_signal(signal, receive_method, receive_param) //spawn(5) program.process() //no, program.process sends some signals and machines respond and we here again and we lag -rastaf0 +/obj/machinery/embedded_controller/Topic(href, href_list) + if((. = ..())) + return + if(usr) + usr.set_machine(src) + src.add_fingerprint(usr) + // We would now pass it to the program, except that some of our embedded controller types want to block certain commands. + // Until/unless that is refactored differently, we rely on subtypes to pass it on. + //if(program) + // return program.receive_user_command(href_list["command"]) + /obj/machinery/embedded_controller/process() if(program) program.process() @@ -40,14 +53,16 @@ obj/machinery/embedded_controller/radio/Destroy() src.ui_interact(user) -/obj/machinery/embedded_controller/ui_interact() - return +// +// Embedded controller with a radio! (Most things (All things?) use this) +// /obj/machinery/embedded_controller/radio icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_control_standby" power_channel = ENVIRON density = 0 + unacidable = 1 var/id_tag //var/radio_power_use = 50 //power used to xmit signals @@ -55,11 +70,15 @@ obj/machinery/embedded_controller/radio/Destroy() var/frequency = 1379 var/radio_filter = null var/datum/radio_frequency/radio_connection - unacidable = 1 /obj/machinery/embedded_controller/radio/Initialize() + set_frequency(frequency) // Set it before parent instantiates program . = ..() - set_frequency(frequency) + +/obj/machinery/embedded_controller/radio/Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + ..() /obj/machinery/embedded_controller/radio/update_icon() if(on && program) diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index 0cc711c7a4..48340b0c8b 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -11,8 +11,15 @@ var/obj/machinery/embedded_controller/radio/R = M id_tag = R.id_tag +/datum/computer/file/embedded_program/Destroy() + if(master) + master.program = null + master = null + return ..() + +// Return TRUE if was a command for us, otherwise return FALSE (so controllers with multiple programs can try each in turn until one accepts) /datum/computer/file/embedded_program/proc/receive_user_command(command) - return + return FALSE /datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) return diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index 14b27b2512..d2e04a3330 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -1,16 +1,12 @@ //a docking port that uses a single door /obj/machinery/embedded_controller/radio/simple_docking_controller name = "docking hatch controller" + program = /datum/computer/file/embedded_program/docking/simple var/tag_door - var/datum/computer/file/embedded_program/docking/simple/docking_program - -/obj/machinery/embedded_controller/radio/simple_docking_controller/Initialize() - . = ..() - docking_program = new/datum/computer/file/embedded_program/docking/simple(src) - program = docking_program /obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] + var/datum/computer/file/embedded_program/docking/simple/docking_program = program // Cast to proper type data = list( "docking_status" = docking_program.get_docking_status(), @@ -28,11 +24,8 @@ ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/simple_docking_controller/Topic(href, href_list) - if(..()) - return 1 - - usr.set_machine(src) - src.add_fingerprint(usr) + if((. = ..())) + return var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks @@ -44,8 +37,7 @@ if(clean) program.receive_user_command(href_list["command"]) - return 0 - + return //A docking controller program for a simple door based docking port /datum/computer/file/embedded_program/docking/simple @@ -76,6 +68,7 @@ ..(signal, receive_method, receive_param) /datum/computer/file/embedded_program/docking/simple/receive_user_command(command) + . = TRUE switch(command) if("force_door") if (override_enabled) @@ -88,7 +81,8 @@ disable_override() else enable_override() - + else + . = FALSE /datum/computer/file/embedded_program/docking/simple/proc/signal_door(var/command) var/datum/signal/signal = new diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 1a019105b4..43d9168a65 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -210,7 +210,7 @@ return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]" /obj/machinery/status_display/proc/get_supply_shuttle_timer() - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle = supply_controller.shuttle if(!shuttle) return "Error" diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm index 211918c5e6..d0590cfa4e 100644 --- a/code/game/machinery/supply_display.dm +++ b/code/game/machinery/supply_display.dm @@ -6,7 +6,7 @@ message1 = "CARGO" message2 = "" - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle = supply_controller.shuttle if(!shuttle) message2 = "Error" else if(shuttle.has_arrive_time()) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index abfd8492cf..c031e0941a 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -145,9 +145,6 @@ return 0 return 1 -/obj/item/mecha_parts/mecha_equipment/proc/handle_movement_action() //Any modules that have special effects or needs when taking a step or floating through space. - return - /obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) return diff --git a/code/game/mecha/equipment/mecha_equipment_dynamicprocs.dm b/code/game/mecha/equipment/mecha_equipment_dynamicprocs.dm new file mode 100644 index 0000000000..9166e6a3de --- /dev/null +++ b/code/game/mecha/equipment/mecha_equipment_dynamicprocs.dm @@ -0,0 +1,19 @@ +/* + * File containing all the default 'handlers' for Exosuit equipment, hopefully to make all dynX calls extinct. + */ + +// Used for impacting (thrown) objects, and damage value. +/obj/item/mecha_parts/mecha_equipment/proc/handle_ranged_contact(var/obj/A, var/inc_damage = 0) + return max(0, inc_damage) + +// Used for melee strikes with an object, and a mob, and damage value. +/obj/item/mecha_parts/mecha_equipment/proc/handle_melee_contact(var/obj/item/weapon/W, var/mob/living/user, var/inc_damage = 0) + return max(0, inc_damage) + +// Used for projectile impacts from bullet_act. +/obj/item/mecha_parts/mecha_equipment/proc/handle_projectile_contact(var/obj/item/projectile/Proj, var/inc_damage = 0) + return max(0, inc_damage) + +// Used for on-movement actions. +/obj/item/mecha_parts/mecha_equipment/proc/handle_movement_action() //Any modules that have special effects or needs when taking a step or floating through space. + return diff --git a/code/game/mecha/equipment/tools/armor_melee.dm b/code/game/mecha/equipment/tools/armor_melee.dm index a723882657..8390a2cc52 100644 --- a/code/game/mecha/equipment/tools/armor_melee.dm +++ b/code/game/mecha/equipment/tools/armor_melee.dm @@ -11,6 +11,30 @@ equip_type = EQUIP_HULL +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/handle_melee_contact(var/obj/item/weapon/W, var/mob/living/user, var/inc_damage = null) + if(!action_checks(user)) + return inc_damage + chassis.log_message("Attacked by [W]. Attacker - [user]") + if(prob(chassis.deflect_chance*deflect_coeff)) + to_chat(user, "\The [W] bounces off \the [chassis]'s armor.") + chassis.log_append_to_last("Armor saved.") + inc_damage = 0 + else + chassis.occupant_message("\The [user] hits [chassis] with [W].") + user.visible_message("\The [user] hits [chassis] with [W].", "You hit [src] with [W].") + inc_damage *= damage_coeff + set_ready_state(0) + chassis.use_power(energy_drain) + spawn() + do_after_cooldown() + return max(0, inc_damage) + +/* + /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynattackby"]) @@ -27,10 +51,6 @@ ..() return -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob) if(!action_checks(user)) return chassis.dynattackby(W,user) @@ -46,4 +66,5 @@ set_ready_state(0) chassis.use_power(energy_drain) do_after_cooldown() - return \ No newline at end of file + return +*/ diff --git a/code/game/mecha/equipment/tools/armor_ranged.dm b/code/game/mecha/equipment/tools/armor_ranged.dm index 2e3523275f..4fb3aac32b 100644 --- a/code/game/mecha/equipment/tools/armor_ranged.dm +++ b/code/game/mecha/equipment/tools/armor_ranged.dm @@ -11,6 +11,45 @@ equip_type = EQUIP_HULL +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/handle_projectile_contact(var/obj/item/projectile/Proj, var/inc_damage) + if(istype(Proj, /obj/item/projectile/test)) + return inc_damage// Don't care about test projectiles, just what comes after them + if(!action_checks(src)) + return inc_damage + if(prob(chassis.deflect_chance*deflect_coeff)) + chassis.occupant_message("The armor deflects incoming projectile.") + chassis.visible_message("The [chassis.name] armor deflects the projectile.") + chassis.log_append_to_last("Armor saved.") + inc_damage = 0 + else + inc_damage *= src.damage_coeff + set_ready_state(0) + chassis.use_power(energy_drain) + spawn() + do_after_cooldown() + return max(0, inc_damage) + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/handle_ranged_contact(var/obj/A, var/inc_damage = 0) + if(!action_checks(A)) + return inc_damage + if(prob(chassis.deflect_chance*deflect_coeff)) + chassis.occupant_message("The [A] bounces off the armor.") + chassis.visible_message("The [A] bounces off \the [chassis]'s armor") + chassis.log_append_to_last("Armor saved.") + inc_damage = 0 + else if(istype(A, /obj)) + inc_damage *= damage_coeff + set_ready_state(0) + chassis.use_power(energy_drain) + spawn() + do_after_cooldown() + return max(0, inc_damage) + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/* /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"]) @@ -29,10 +68,6 @@ ..() return -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynbulletdamage(var/obj/item/projectile/Proj) if(istype(Proj, /obj/item/projectile/test)) return // Don't care about test projectiles, just what comes after them @@ -69,4 +104,5 @@ set_ready_state(0) chassis.use_power(energy_drain) do_after_cooldown() - return \ No newline at end of file + return +*/ diff --git a/code/game/mecha/equipment/tools/hardpoint_actuator.dm b/code/game/mecha/equipment/tools/hardpoint_actuator.dm new file mode 100644 index 0000000000..735fec6f96 --- /dev/null +++ b/code/game/mecha/equipment/tools/hardpoint_actuator.dm @@ -0,0 +1,34 @@ +/* + * A special device used to pick up and equip other exosuit components on the fly, without leaving an Exosuit. Costly. + */ + +/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator + name = "hardpoint actuator clamp" + icon_state = "mecha_clamp" + equip_cooldown = 10 SECONDS + energy_drain = 600 + equip_type = EQUIP_HULL + origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_POWER = 4, TECH_COMBAT = 1, TECH_MAGNET = 4) + +/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator/action(atom/target) + if(!action_checks(target)) + return + + if(istype(target,/obj/item/mecha_parts/mecha_equipment)) + var/obj/item/mecha_parts/mecha_equipment/ME = target + if(ME.can_attach(chassis)) + occupant_message("[ME] can be integrated. Stand by.") + if(do_after(chassis.occupant, 3 SECONDS, target)) + if(ME.can_attach(chassis) && action_checks(target)) + ME.attach(chassis) + occupant_message("[ME] successfully integrated.") + else + occupant_message("[ME] cannot be integrated due to lack of free hardpoints.") + + else + occupant_message("[target] is not compatible with any present hardpoints.") + + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return diff --git a/code/game/mecha/equipment/tools/inflatables.dm b/code/game/mecha/equipment/tools/inflatables.dm new file mode 100644 index 0000000000..b18ba2eae1 --- /dev/null +++ b/code/game/mecha/equipment/tools/inflatables.dm @@ -0,0 +1,47 @@ +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables + name = "inflatable deployment mechanism" + desc = "An exosuit-mounted inflatable barrier deployer. Useful!" + icon_state = "mecha_inflatables" + origin_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3) + equip_cooldown = 3 + energy_drain = 30 + range = MELEE + equip_type = EQUIP_UTILITY + ready_sound = 'sound/effects/spray.ogg' + required_type = list(/obj/mecha/working/ripley) + + tooltype = /obj/item/weapon/inflatable_dispenser/robot + var/obj/item/weapon/inflatable_dispenser/my_deployer = null + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Initialize() + ..() + my_deployer = my_tool + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Topic(href, href_list) + ..() + if(href_list["toggle_deployable_mode"]) + my_deployer.attack_self() + update_chassis_page() + return + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/get_equip_info() + if(!chassis) return + var/data_return = "* [chassis.selected==src?"":""][src.name][chassis.selected==src?"":""] - Deploy [my_deployer.mode?"Door":"Wall"]
\ +   - Doors left: [my_deployer.stored_doors]/[my_deployer.max_doors]
\ +   - Walls left: [my_deployer.stored_walls]/[my_deployer.max_walls]" + + return data_return + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/action(atom/target, params) + if(!action_checks(target)) + return + + if(istype(target, /turf)) + my_deployer.try_deploy_inflatable(target, chassis.occupant) + if(istype(target, /obj/item/inflatable) || istype(target, /obj/structure/inflatable)) + my_deployer.pick_up(target, chassis.occupant) + + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return diff --git a/code/game/mecha/equipment/tools/passenger.dm b/code/game/mecha/equipment/tools/passenger.dm index a84dc2981b..8ce9d21aa9 100644 --- a/code/game/mecha/equipment/tools/passenger.dm +++ b/code/game/mecha/equipment/tools/passenger.dm @@ -1,7 +1,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/passenger name = "passenger compartment" desc = "A mountable passenger compartment for exosuits. Rather cramped." - icon_state = "mecha_abooster_ccw" + icon_state = "mecha_passenger" origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 1) energy_drain = 10 range = MELEE diff --git a/code/game/mecha/equipment/tools/wrench.dm b/code/game/mecha/equipment/tools/powertool.dm similarity index 66% rename from code/game/mecha/equipment/tools/wrench.dm rename to code/game/mecha/equipment/tools/powertool.dm index 605c2ee33d..0adcb98929 100644 --- a/code/game/mecha/equipment/tools/wrench.dm +++ b/code/game/mecha/equipment/tools/powertool.dm @@ -38,4 +38,18 @@ desc = "An exosuit-mounted pneumatic prybar." icon_state = "mecha_crowbar" tooltype = /obj/item/weapon/tool/crowbar/power - ready_sound = 'sound/mecha/gasdisconnected.ogg' \ No newline at end of file + ready_sound = 'sound/mecha/gasdisconnected.ogg' + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter + name = "pneumatic cablecutter" + desc = "An exosuit-mounted pneumatic cablecutter." + icon_state = "mecha_cablecutter" + tooltype = /obj/item/weapon/tool/wirecutters/power + ready_sound = 'sound/mecha/gasdisconnected.ogg' + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver + name = "pneumatic screwdriver" + desc = "An exosuit-mounted pneumatic screwdriver." + icon_state = "mecha_screwdriver" + tooltype = /obj/item/weapon/tool/screwdriver/power + ready_sound = 'sound/mecha/gasdisconnected.ogg' diff --git a/code/game/mecha/equipment/tools/weldinglaser.dm b/code/game/mecha/equipment/tools/weldinglaser.dm new file mode 100644 index 0000000000..ff1c5733a5 --- /dev/null +++ b/code/game/mecha/equipment/tools/weldinglaser.dm @@ -0,0 +1,34 @@ +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding + name = "welding laser" + desc = "An exosuit-mounted welding laser." + icon_state = "mecha_laser-rig" + origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 4, TECH_PHORON = 2) + equip_cooldown = 3 + energy_drain = 15 + range = MELEE + equip_type = EQUIP_UTILITY + ready_sound = 'sound/items/Ratchet.ogg' + required_type = list(/obj/mecha/working/ripley) + + tooltype = /obj/item/weapon/weldingtool/electric/mounted/exosuit + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding/action(var/atom/target) + ..() + + var/datum/beam/weld_beam = null + if(is_ranged()) + var/atom/movable/beam_origin = chassis + weld_beam = beam_origin.Beam(target, icon_state = "solar_beam", time = 0.3 SECONDS) + + if(!do_after(chassis.occupant, 0.3 SECONDS, target)) + qdel(weld_beam) + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding/attach(obj/mecha/M as obj) + ..() + + if(enable_special) + range = MELEE|RANGED + my_tool.reach = 7 + else + range = MELEE + my_tool.reach = 1 diff --git a/code/game/mecha/equipment/weapons/defense/shocker.dm b/code/game/mecha/equipment/weapons/defense/shocker.dm index af120167d2..58dccec562 100644 --- a/code/game/mecha/equipment/weapons/defense/shocker.dm +++ b/code/game/mecha/equipment/weapons/defense/shocker.dm @@ -15,6 +15,7 @@ equip_type = EQUIP_HULL +/* /obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"]) @@ -25,9 +26,11 @@ ..() chassis.proc_res["dynattackby"] = src return +*/ -/obj/item/mecha_parts/mecha_equipment/shocker/proc/dynattackby(obj/item/weapon/W, mob/living/user) +/obj/item/mecha_parts/mecha_equipment/shocker/handle_melee_contact(var/obj/item/weapon/W, var/mob/living/user, var/inc_damage = null) if(!action_checks(user) || !active) return + user.electrocute_act(shock_damage, src) - return chassis.dynattackby(W,user) + return inc_damage diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index d6bcedc569..500f75b6c6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -622,7 +622,12 @@ else if(istype(A, /obj)) var/obj/O = A if(O.throwforce) - src.take_damage(O.throwforce) + + var/pass_damage = O.throwforce + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + pass_damage = ME.handle_ranged_contact(A, pass_damage) + + src.take_damage(pass_damage) src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) return @@ -652,7 +657,12 @@ var/ignore_threshold if(istype(Proj, /obj/item/projectile/beam/pulse)) ignore_threshold = 1 - src.take_damage(Proj.damage, Proj.check_armour) + + var/pass_damage = Proj.damage + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + pass_damage = ME.handle_projectile_contact(Proj, pass_damage) + + src.take_damage(pass_damage, Proj.check_armour) if(prob(25)) spark_system.start() src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold) @@ -748,7 +758,11 @@ else src.occupant_message("[user] hits [src] with [W].") user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") - src.take_damage(W.force,W.damtype) + + var/pass_damage = W.force + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + pass_damage = ME.handle_projectile_contact(W, user, pass_damage) + src.take_damage(pass_damage,W.damtype) src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) return diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index e89355086f..f51dc9e4b1 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -74,12 +74,8 @@ qdel(src) /obj/effect/effect/foam/Crossed(var/atom/movable/AM) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(AM.is_incorporeal()) + return if(metal) return if(istype(AM, /mob/living)) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index f9c70c9f16..1d740abb68 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -70,12 +70,8 @@ var/global/list/image/splatter_cache=list() desc = initial(desc) /obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = perp - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(perp.is_incorporeal()) + return if (!istype(perp)) return if(amount < 1) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index b7d45a9cb3..7d5275cbcd 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -185,12 +185,8 @@ steam.start() -- spawns the effect qdel(src) /obj/effect/effect/smoke/Crossed(mob/living/carbon/M as mob ) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = M - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(M.is_incorporeal()) + return ..() if(istype(M)) affect(M) diff --git a/code/game/objects/effects/map_effects/perma_light.dm b/code/game/objects/effects/map_effects/perma_light.dm index 3a82dc7e69..281c128fe6 100644 --- a/code/game/objects/effects/map_effects/perma_light.dm +++ b/code/game/objects/effects/map_effects/perma_light.dm @@ -6,4 +6,12 @@ light_range = 3 light_power = 1 + light_color = "#FFFFFF" + +/obj/effect/map_effect/perma_light/brighter + name = "permanent light (bright)" + icon_state = "permalight" + + light_range = 5 + light_power = 3 light_color = "#FFFFFF" \ No newline at end of file diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index fb4117ef44..2cca71b9de 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -35,13 +35,9 @@ explode() ..() -/obj/effect/mine/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/effect/mine/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return Bumped(AM) /obj/effect/mine/Bumped(mob/M as mob|obj) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 1a9488a0a6..514385b774 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -20,13 +20,9 @@ GLOBAL_LIST_BOILERPLATE(all_portals, /obj/effect/portal) return return -/obj/effect/portal/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/effect/portal/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return if(istype(AM,/mob) && !(istype(AM,/mob/living))) return //do not send ghosts, zshadows, ai eyes, etc spawn(0) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 870656d92e..a3c3c242c2 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -12,13 +12,9 @@ /obj/effect/step_trigger/proc/Trigger(var/atom/movable/A) return 0 -/obj/effect/step_trigger/Crossed(H as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = H - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/effect/step_trigger/Crossed(atom/movable/H as mob|obj) + if(H.is_incorporeal()) + return ..() if(!H) return diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 6a5fcc2a98..5149d6fa67 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1468,13 +1468,9 @@ var/global/list/obj/item/device/pda/PDAs = list() QDEL_NULL(src.pai) return ..() -/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/item/device/pda/clown/Crossed(atom/movable/AM as mob|obj) //Clown PDA is slippery. + if(AM.is_incorporeal()) + return if (istype(AM, /mob/living)) var/mob/living/M = AM diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index e34d1180c9..3d2a6cbc6e 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -425,7 +425,7 @@ var/list/civilian_cartridges = list( if(mode==47) var/supplyData[0] - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle = supply_controller.shuttle if (shuttle) supplyData["shuttle_moving"] = shuttle.has_arrive_time() supplyData["shuttle_eta"] = shuttle.eta_minutes() diff --git a/code/game/objects/items/devices/communicator/helper.dm b/code/game/objects/items/devices/communicator/helper.dm index 25db45b666..ce5eef016c 100644 --- a/code/game/objects/items/devices/communicator/helper.dm +++ b/code/game/objects/items/devices/communicator/helper.dm @@ -394,7 +394,7 @@ // code\game\machinery\computer\supply.dm, starting at line 55 /obj/item/weapon/commcard/proc/get_supply_shuttle_status() var/shuttle_status[0] - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/autodock/ferry/supply/shuttle = supply_controller.shuttle if(shuttle) if(shuttle.has_arrive_time()) shuttle_status["location"] = "In transit" @@ -404,8 +404,8 @@ else shuttle_status["time"] = 0 if(shuttle.at_station()) - if(shuttle.docking_controller) - switch(shuttle.docking_controller.get_docking_status()) + if(shuttle.shuttle_docking_controller) + switch(shuttle.shuttle_docking_controller.get_docking_status()) if("docked") shuttle_status["location"] = "Docked" shuttle_status["mode"] = SUP_SHUTTLE_DOCKED diff --git a/code/game/objects/items/devices/scanners_vr.dm b/code/game/objects/items/devices/scanners_vr.dm index 1a5fd2c61f..8a7bb15c32 100644 --- a/code/game/objects/items/devices/scanners_vr.dm +++ b/code/game/objects/items/devices/scanners_vr.dm @@ -17,6 +17,32 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob var/datum/mind/stored_mind + var/ooc_notes = null //For holding prefs + + + +//These don't perform any checks and need to be wrapped by checks +/obj/item/device/sleevemate/proc/clear_mind() + stored_mind = null + ooc_notes = null + update_icon() + +/obj/item/device/sleevemate/proc/get_mind(mob/living/M) + ASSERT(M.mind) + ooc_notes = M.ooc_notes + stored_mind = M.mind + M.ghostize() + stored_mind.current = null + update_icon() + +/obj/item/device/sleevemate/proc/put_mind(mob/living/M) + stored_mind.active = TRUE + stored_mind.transfer_to(M) + M.ooc_notes = ooc_notes + clear_mind() + + + /obj/item/device/sleevemate/attack(mob/living/M, mob/living/user) if(ishuman(M)) scan_mob(M, user) @@ -34,8 +60,7 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob switch(choice) if("Delete") to_chat(user,"Internal copy of [stored_mind.name] deleted.") - stored_mind = null - update_icon() + clear_mind() if("Backup") to_chat(user,"Internal copy of [stored_mind.name] backed up to database.") SStranscore.m_backup(stored_mind,null,one_time = TRUE) @@ -183,10 +208,7 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob usr.visible_message("[usr] begins downloading [target]'s mind!","You begin downloading [target]'s mind!") if(do_after(usr,35 SECONDS,target)) //This is powerful, yo. if(!stored_mind && target.mind) - stored_mind = target.mind - target.ghostize() - stored_mind.current = null - update_icon() + get_mind(target) to_chat(usr,"Mind downloaded!") return @@ -212,12 +234,9 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob if(!sleevemate_mob) sleevemate_mob = new() - stored_mind.active = TRUE //Setting this causes transfer_to, to key them into the mob - stored_mind.transfer_to(sleevemate_mob) + put_mind(sleevemate_mob) SC.catch_mob(sleevemate_mob) - stored_mind = null to_chat(usr,"Mind transferred into Soulcatcher!") - update_icon() if(href_list["mindupload"]) if(!stored_mind) @@ -238,11 +257,8 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob if(!stored_mind) to_chat(usr,"\The [src] no longer has a stored mind.") return - stored_mind.active = TRUE - stored_mind.transfer_to(target) - stored_mind = null + put_mind(target) to_chat(usr,"Mind transferred into [target]!") - update_icon() if(href_list["mindrelease"]) if(stored_mind) @@ -254,10 +270,8 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob return for(var/mob/living/carbon/brain/caught_soul/soul in SC.brainmobs) if(soul.name == href_list["mindrelease"]) - stored_mind = soul.mind - stored_mind.current = null - soul.Destroy() - update_icon() + get_mind(soul) + qdel(soul) to_chat(usr,"Mind downloaded!") return to_chat(usr,"Unable to find that mind in Soulcatcher!") diff --git a/code/game/objects/items/devices/translocator_vr.dm b/code/game/objects/items/devices/translocator_vr.dm index 808ced86a3..f171f147c3 100644 --- a/code/game/objects/items/devices/translocator_vr.dm +++ b/code/game/objects/items/devices/translocator_vr.dm @@ -16,6 +16,7 @@ var/abductor = 0 //Can be used on teleportation blocking turfs var/list/beacons = list() + var/loc_network = null //Used if you want to create pre-made beacons on the maps var/ready = 1 var/beacons_left = 3 var/failure_chance = 5 //Percent @@ -24,8 +25,9 @@ var/list/warned_users = list() var/list/logged_events = list() -/obj/item/device/perfect_tele/New() - ..() + +/obj/item/device/perfect_tele/Initialize() + . = ..() flags |= NOBLUDGEON if(cell_type) power_source = new cell_type(src) @@ -73,6 +75,12 @@ to_chat(user,"[src] does not have a power cell.") /obj/item/device/perfect_tele/attack_self(mob/user) + if(loc_network) + for(var/obj/item/device/perfect_tele_beacon/stationary/nb in premade_tele_beacons) + if(nb.tele_network == loc_network) + beacons[nb.tele_name] = nb + loc_network = null //Consumed + if(!(user.ckey in warned_users)) warned_users |= user.ckey alert(user,"This device can be easily used to break ERP preferences due to the nature of teleporting \ @@ -380,6 +388,7 @@ GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beac /obj/item/device/perfect_tele/alien name = "alien translocator" desc = "This strange device allows one to teleport people and objects across large distances." + icon_state = "alientele" cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien charge_cost = 400 @@ -388,13 +397,26 @@ GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beac longrange = 1 abductor = 1 +/obj/item/device/perfect_tele/alien/bluefo + name = "hybrid translocator" + desc = "This strange device allows one to teleport people and objects across large distances. It has only a single preprogrammed destination, though." + icon_state = "alientele" + + cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien + charge_cost = 400 + beacons_left = 0 + failure_chance = 0 + longrange = 1 + abductor = 1 + loc_network = "hybridshuttle" + /obj/item/device/perfect_tele/frontier - icon_state = "minitrans" + icon_state = "frontiertrans" beacons_left = 1 //Just one battery_lock = 1 unacidable = 1 failure_chance = 0 //Percent - var/loc_network = null + var/phase_power = 75 var/recharging = 0 @@ -429,12 +451,6 @@ GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beac loc_network = "centcom" longrange = 1 -/obj/item/device/perfect_tele/frontier/staff/New() - ..() - for(var/obj/item/device/perfect_tele_beacon/stationary/nb in premade_tele_beacons) - if(nb.tele_network == loc_network) - beacons[nb.tele_name] = nb - /obj/item/device/perfect_tele/frontier/unknown name = "modified translocator" desc = "This crank-charged translocator has only one beacon, but it already has a destination preprogrammed into it." @@ -442,12 +458,6 @@ GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/device/perfect_tele_beac longrange = 1 abductor = 1 -/obj/item/device/perfect_tele/frontier/unknown/New() - ..() - for(var/obj/item/device/perfect_tele_beacon/stationary/nb in premade_tele_beacons) - if(nb.tele_network == loc_network) - beacons[nb.tele_name] = nb - /obj/item/device/perfect_tele/frontier/unknown/one loc_network = "unkone" /obj/item/device/perfect_tele/frontier/unknown/two diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 850de74ba4..927d21c646 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -355,13 +355,9 @@ playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) -/obj/item/toy/snappop/Crossed(H as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = H - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/item/toy/snappop/Crossed(atom/movable/H as mob|obj) + if(H.is_incorporeal()) + return if((ishuman(H))) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H if(M.m_intent == "run") diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 890e557f50..1f53e64e77 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -8,13 +8,9 @@ /* * Banana Peals */ -/obj/item/weapon/bananapeel/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/item/weapon/bananapeel/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return if (istype(AM, /mob/living)) var/mob/living/M = AM M.slip("the [src.name]",4) @@ -29,13 +25,9 @@ /obj/item/weapon/soap/proc/wet() reagents.add_reagent("cleaner", 5) -/obj/item/weapon/soap/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/item/weapon/soap/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return if (istype(AM, /mob/living)) var/mob/living/M = AM M.slip("the [src.name]",3) diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index f98959ff2e..e2394537f3 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -106,14 +106,10 @@ qdel(src) return -/obj/item/weapon/material/shard/Crossed(AM as mob|obj) +/obj/item/weapon/material/shard/Crossed(atom/movable/AM as mob|obj) ..() - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(AM.is_incorporeal()) + return if(isliving(AM)) var/mob/M = AM diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 0a1699ca3a..51f486766a 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -644,6 +644,10 @@ var/obj/item/weapon/rig/suit = H.back if(istype(suit)) return suit.cell + if(istype(src.loc, /obj/item/mecha_parts/mecha_equipment)) + var/obj/item/mecha_parts/mecha_equipment/mounting = src.loc + if(mounting.chassis && mounting.chassis.cell) + return mounting.chassis.cell return null /obj/item/weapon/weldingtool/electric/mounted @@ -652,4 +656,26 @@ /obj/item/weapon/weldingtool/electric/mounted/cyborg toolspeed = 0.5 -#undef WELDER_FUEL_BURN_INTERVAL \ No newline at end of file +/obj/item/weapon/weldingtool/electric/mounted/exosuit + var/obj/item/mecha_parts/mecha_equipment/equip_mount = null + flame_intensity = 1 + eye_safety_modifier = 2 + always_process = TRUE + +/obj/item/weapon/weldingtool/electric/mounted/exosuit/Initialize() + ..() + + if(istype(loc, /obj/item/mecha_parts/mecha_equipment)) + equip_mount = loc + +/obj/item/weapon/weldingtool/electric/mounted/exosuit/process() + ..() + + if(equip_mount && equip_mount.chassis) + var/obj/mecha/M = equip_mount.chassis + if(M.selected == equip_mount && get_fuel()) + setWelding(TRUE, M.occupant) + else + setWelding(FALSE, M.occupant) + +#undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index ab71c0cec5..1f9397e705 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -107,13 +107,9 @@ deployed = 0 can_buckle = initial(can_buckle) -/obj/item/weapon/beartrap/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/item/weapon/beartrap/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return if(deployed && isliving(AM)) var/mob/living/L = AM if(L.m_intent == "run") diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index 5c606422d7..26e040c7e9 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -87,14 +87,8 @@ return ..() /obj/structure/catwalk/Crossed() - //VOREStation Edit begin: SHADEKIN - var/mob/SK = usr - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN . = ..() - if(isliving(usr)) + if(isliving(usr) && !usr.is_incorporeal()) playsound(src, pick('sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', 'sound/effects/footstep/catwalk3.ogg', 'sound/effects/footstep/catwalk4.ogg', 'sound/effects/footstep/catwalk5.ogg'), 25, 1) /obj/structure/catwalk/CheckExit(atom/movable/O, turf/target) diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index f46364134e..b2b874f5c8 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -19,6 +19,8 @@ var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/tool/crowbar/red) var/amount = 2 // spawns each items X times. icon_state = "emerg" + icon_closed = "emerg" + icon_opened = "emerg_open" /obj/structure/closet/walllocker/emerglocker/toggle(mob/user as mob) src.attack_hand(user) diff --git a/code/game/objects/structures/props/alien_props_vr.dm b/code/game/objects/structures/props/alien_props_vr.dm new file mode 100644 index 0000000000..b306d610ba --- /dev/null +++ b/code/game/objects/structures/props/alien_props_vr.dm @@ -0,0 +1,13 @@ +/obj/structure/prop/alien/computer/hybrid + name = "hybrid console" + desc = "The console flashes what appear to be symbols you've never seen before, intermixed with human writing moving too fast to comprehend." + icon = 'icons/obj/abductor_vr.dmi' + icon_state = "console-c" + interaction_message = "The screen flashes an 'access denied' message at you. Perhaps for the best." + +/obj/structure/prop/alien/pod/hybrid + name = "hybrid pod" + desc = "This seems to be a container for something." + icon = 'icons/obj/abductor_vr.dmi' + icon_state = "experiment" + interaction_message = "You don't see any mechanism to open this thing. Probably for the best." \ No newline at end of file diff --git a/code/game/objects/structures/simple_doors_vr.dm b/code/game/objects/structures/simple_doors_vr.dm new file mode 100644 index 0000000000..7738674569 --- /dev/null +++ b/code/game/objects/structures/simple_doors_vr.dm @@ -0,0 +1,23 @@ +/material/flockium + name = "flockium" + //stack_type = /obj/item/stack/material/sandstone + icon_base = "flock" + icon_reinf = "flock" + icon_colour = "#FFFFFF" + //shard_type = SHARD_STONE_PIECE + weight = 30 + hardness = 200 + protectiveness = 5 // 20% + conductive = 0 + conductivity = 0 + door_icon_base = "flockdoor" + sheet_singular_name = "quanta" + sheet_plural_name = "quanta" + +/obj/structure/simple_door/flock + name = "aperture" + icon = 'icons/goonstation/featherzone.dmi' + icon_state = "flockdoor" + +/obj/structure/simple_door/flock/New(var/newloc, var/newmat) + ..(newloc, "flockium") \ No newline at end of file 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 c414aa9a02..24f72c37d9 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -42,7 +42,7 @@ /obj/structure/bed/update_icon() // Prep icon. icon_state = "" - overlays.Cut() + cut_overlays() // Base icon. var/cache_key = "[base_icon]-[material.name]" if(isnull(stool_cache[cache_key])) @@ -50,7 +50,7 @@ if(applies_material_colour) //VOREStation Add - Goes with added var I.color = material.icon_colour stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] + add_overlay(stool_cache[cache_key]) // Padding overlay. if(padding_material) var/padding_cache_key = "[base_icon]-padding-[padding_material.name]" @@ -58,7 +58,7 @@ var/image/I = image(icon, "[base_icon]_padding") I.color = padding_material.icon_colour stool_cache[padding_cache_key] = I - overlays |= stool_cache[padding_cache_key] + add_overlay(stool_cache[padding_cache_key]) // Strings. desc = initial(desc) if(padding_material) 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 433b107b01..99f9cd567f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -47,13 +47,12 @@ var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]" if(isnull(stool_cache[cache_key])) var/image/I = image(icon, "[base_icon]_armrest") - I.layer = MOB_LAYER + 0.1 I.plane = MOB_PLANE + I.layer = ABOVE_MOB_LAYER if(padding_material) I.color = padding_material.icon_colour - stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] - + stool_cache[cache_key] = I + add_overlay(stool_cache[cache_key]) /obj/structure/bed/chair/proc/update_layer() if(src.dir == NORTH) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm index 205ba2a750..79b970e1cf 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm @@ -11,7 +11,7 @@ var/image/I = image(icon, "[base_icon]_over") I.layer = ABOVE_MOB_LAYER I.plane = MOB_PLANE - overlays |= I + add_overlay(I) /obj/structure/bed/chair/bar_stool name = "bar stool" diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index d7adf8079f..525b9883d5 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -37,14 +37,14 @@ var/global/list/stool_cache = list() //haha stool /obj/item/weapon/stool/update_icon() // Prep icon. icon_state = "" - overlays.Cut() + cut_overlays() // Base icon. var/cache_key = "stool-[material.name]" if(isnull(stool_cache[cache_key])) var/image/I = image(icon, base_icon) I.color = material.icon_colour stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] + add_overlay(stool_cache[cache_key]) // Padding overlay. if(padding_material) var/padding_cache_key = "stool-padding-[padding_material.name]" @@ -52,7 +52,7 @@ var/global/list/stool_cache = list() //haha stool var/image/I = image(icon, "[base_icon]_padding") //VOREStation Edit I.color = padding_material.icon_colour stool_cache[padding_cache_key] = I - overlays |= stool_cache[padding_cache_key] + add_overlay(stool_cache[padding_cache_key]) // Strings. if(padding_material) name = "[padding_material.display_name] [initial(name)]" //this is not perfect but it will do for now. 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 e177f2c4a1..388909b6a5 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -14,9 +14,9 @@ /obj/structure/bed/chair/wheelchair/set_dir() ..() - overlays = null + cut_overlays() var/image/O = image(icon = 'icons/obj/furniture.dmi', icon_state = "w_overlay", layer = FLY_LAYER, dir = src.dir) - overlays += O + add_overlay(O) if(has_buckled_mobs()) for(var/A in buckled_mobs) var/mob/living/L = A diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index d670fc3a40..bf93dcb8a2 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -55,7 +55,7 @@ return new_dest -/obj/landed_holder/proc/leave_turf() +/obj/landed_holder/proc/leave_turf(var/turf/base_turf = null) var/turf/new_source //Change our source to whatever it was before if(turf_type) @@ -67,7 +67,7 @@ new_source.underlays = underlays new_source.decals = decals else - new_source = my_turf.ChangeTurf(get_base_turf_by_area(my_turf),,1) + new_source = my_turf.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(my_turf),,1) return new_source diff --git a/code/game/turfs/simulated/floor_types_vr.dm b/code/game/turfs/simulated/floor_types_vr.dm index e89c3d0b29..c4315b29b2 100644 --- a/code/game/turfs/simulated/floor_types_vr.dm +++ b/code/game/turfs/simulated/floor_types_vr.dm @@ -1,3 +1,17 @@ +/turf/simulated/shuttle/floor/alienplating/blue + icon = 'icons/turf/shuttle_alien_blue.dmi' + icon_state = "alienplating" + +/turf/simulated/shuttle/floor/alienplating/blue/half + icon_state = "alienplatinghalf" + +/turf/simulated/shuttle/floor/alien/blue + icon = 'icons/turf/shuttle_alien_blue.dmi' + icon_state = "alienpod1" + light_range = 4 + light_power = 0.8 + light_color = "#66ffff" // Bright cyan. + /turf/simulated/floor/flesh name = "flesh" desc = "This slick flesh ripples and squishes under your touch" @@ -14,4 +28,17 @@ return /turf/simulated/floor/flesh/ex_act(severity) - return \ No newline at end of file + return + +/turf/simulated/floor/flock + icon = 'icons/goonstation/featherzone.dmi' + icon_state = "floor" + +/turf/simulated/floor/flock/Crossed(var/atom/movable/AM) + . = ..() + if(isliving(AM)) + icon_state = "floor-on" + set_light(3,3,"#26c5a9") + spawn(5 SECONDS) + icon_state = "floor" + set_light(0,0,"#ffffff") \ No newline at end of file diff --git a/code/game/turfs/simulated/wall_types_vr.dm b/code/game/turfs/simulated/wall_types_vr.dm index 0fc6028c88..e8e3961ce5 100644 --- a/code/game/turfs/simulated/wall_types_vr.dm +++ b/code/game/turfs/simulated/wall_types_vr.dm @@ -59,4 +59,15 @@ var/list/flesh_overlay_cache = list() for(var/direction in alldirs) if(istype(get_step(src, direction), /turf/simulated/flesh)) var/turf/simulated/flesh/F = get_step(src, direction) - F.update_icon() \ No newline at end of file + F.update_icon() + +/turf/simulated/shuttle/wall/flock + icon = 'icons/goonstation/featherzone.dmi' + icon_state = "flockwall0" + base_state = "flockwall" + hard_corner = 1 //They're all HC + true_name = "wall" + +/turf/simulated/shuttle/wall/flock/Initialize() + . = ..() + set_light(3,3,"#26c5a9") diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index f1b35b6b35..b450f344d7 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -16,6 +16,8 @@ var/depth = 1 // Higher numbers indicates deeper water. + var/reagent_type = "water" + /turf/simulated/floor/water/Initialize() . = ..() update_icon() @@ -33,6 +35,21 @@ /turf/simulated/floor/water/get_edge_icon_state() return "water_shallow" +/turf/simulated/floor/water/attackby(obj/item/O as obj, mob/user as mob) + var/obj/item/weapon/reagent_containers/RG = O + if (istype(RG) && RG.is_open_container()) + RG.reagents.add_reagent(reagent_type, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + user.visible_message("[user] fills \the [RG] using \the [src].","You fill \the [RG] using \the [src].") + return 1 + + else if(istype(O, /obj/item/weapon/mop)) + O.reagents.add_reagent(reagent_type, 5) + to_chat(user, "You wet \the [O] in \the [src].") + playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + return 1 + + else return ..() + /turf/simulated/floor/water/return_air_for_internal_lifeform(var/mob/living/L) if(L && L.lying) if(L.can_breathe_water()) // For squid. diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index b72143e4c0..a3bc0494ca 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -24,6 +24,9 @@ for(var/obj/O in src) O.hide(0) +/turf/space/is_solid_structure() + return locate(/obj/structure/lattice, src) //counts as solid structure if it has a lattice + /turf/space/proc/update_starlight() if(!config.starlight) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f687389a5a..f46ff9501f 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -64,6 +64,10 @@ /turf/proc/is_intact() return 0 +// Used by shuttle code to check if this turf is empty enough to not crush want it lands on. +/turf/proc/is_solid_structure() + return 1 + /turf/attack_hand(mob/user) if(!(user.canmove) || user.restrained() || !(user.pulling)) return 0 diff --git a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm index 4097632aa3..3767d21a8b 100644 --- a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm @@ -2,17 +2,17 @@ name = "Jump a Shuttle" /datum/admin_secret_item/admin_secret/jump_shuttle/can_execute(var/mob/user) - if(!shuttle_controller) return 0 + if(!SSshuttles) return 0 return ..() /datum/admin_secret_item/admin_secret/jump_shuttle/execute(var/mob/user) . = ..() if(!.) return - var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in shuttle_controller.shuttles + var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in SSshuttles.shuttles if (!shuttle_tag) return - var/datum/shuttle/S = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] var/origin_area = input(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)") as null|area in world if (!origin_area) return diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm index 9d6ce44a2d..2f253a1a80 100644 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm @@ -2,7 +2,7 @@ name = "Launch a Shuttle" /datum/admin_secret_item/admin_secret/launch_shuttle/can_execute(var/mob/user) - if(!shuttle_controller) return 0 + if(!SSshuttles) return 0 return ..() /datum/admin_secret_item/admin_secret/launch_shuttle/execute(var/mob/user) @@ -10,15 +10,15 @@ if(!.) return var/list/valid_shuttles = list() - for (var/shuttle_tag in shuttle_controller.shuttles) - if (istype(shuttle_controller.shuttles[shuttle_tag], /datum/shuttle/ferry)) + for (var/shuttle_tag in SSshuttles.shuttles) + if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) valid_shuttles += shuttle_tag var/shuttle_tag = input(user, "Which shuttle do you want to launch?") as null|anything in valid_shuttles if (!shuttle_tag) return - var/datum/shuttle/ferry/S = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] if (S.can_launch()) S.launch(user) log_and_message_admins("launched the [shuttle_tag] shuttle", user) diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm index d1a86fec98..592a8da57c 100644 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm +++ b/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm @@ -2,7 +2,7 @@ name = "Launch a Shuttle (Forced)" /datum/admin_secret_item/admin_secret/launch_shuttle_forced/can_execute(var/mob/user) - if(!shuttle_controller) return 0 + if(!SSshuttles) return 0 return ..() /datum/admin_secret_item/admin_secret/launch_shuttle_forced/execute(var/mob/user) @@ -10,15 +10,15 @@ if(!.) return var/list/valid_shuttles = list() - for (var/shuttle_tag in shuttle_controller.shuttles) - if (istype(shuttle_controller.shuttles[shuttle_tag], /datum/shuttle/ferry)) + for (var/shuttle_tag in SSshuttles.shuttles) + if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) valid_shuttles += shuttle_tag var/shuttle_tag = input(user, "Which shuttle's launch do you want to force?") as null|anything in valid_shuttles if (!shuttle_tag) return - var/datum/shuttle/ferry/S = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] if (S.can_force()) S.force_launch(user) log_and_message_admins("forced the [shuttle_tag] shuttle", user) diff --git a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm index 5772bbed54..a79a2d7143 100644 --- a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm @@ -2,7 +2,7 @@ name = "Move a Shuttle" /datum/admin_secret_item/admin_secret/move_shuttle/can_execute(var/mob/user) - if(!shuttle_controller) return 0 + if(!SSshuttles) return 0 return ..() /datum/admin_secret_item/admin_secret/move_shuttle/execute(var/mob/user) @@ -13,16 +13,15 @@ if (confirm == "Cancel") return - var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in shuttle_controller.shuttles + var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in SSshuttles.shuttles if (!shuttle_tag) return - var/datum/shuttle/S = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] - var/origin_area = input(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)") as null|area in world - if (!origin_area) return + var/destination_tag = input(user, "Which landmark do you want to jump to? (IF YOU GET THIS WRONG THINGS WILL BREAK)") as null|anything in SSshuttles.registered_shuttle_landmarks + if (!destination_tag) return + var/destination_location = SSshuttles.get_landmark(destination_tag) + if (!destination_location) return - var/destination_area = input(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)") as null|area in world - if (!destination_area) return - - S.move(origin_area, destination_area) + S.attempt_move(destination_location) log_and_message_admins("moved the [shuttle_tag] shuttle", user) diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index c1638d207a..aadcdaa9e2 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -103,15 +103,11 @@ // 'Tactical' processes such as moving a step, meleeing an enemy, firing a projectile, and other fairly cheap actions that need to happen quickly. /datum/ai_holder/proc/handle_tactics() - if(busy) - return handle_special_tactic() handle_stance_tactical() // 'Strategical' processes that are more expensive on the CPU and so don't get run as often as the above proc, such as A* pathfinding or robust targeting. /datum/ai_holder/proc/handle_strategicals() - if(busy) - return handle_special_strategical() handle_stance_strategical() diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 441367c80d..d815fea765 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -104,12 +104,8 @@ /obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(AM.is_incorporeal()) + return if(a_left) a_left.Crossed(AM) if(a_right) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 75985f7822..8da3fbc21b 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -242,12 +242,8 @@ return /obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(AM.is_incorporeal()) + return if(istype(AM, /obj/effect/beam)) return spawn(0) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 0257b6cf87..be78782b29 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -82,13 +82,9 @@ ..() -/obj/item/device/assembly/mousetrap/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return if(armed) if(ishuman(AM)) var/mob/living/carbon/H = AM diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index cb8b70519e..f8ab8ec8e9 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -428,6 +428,7 @@ client/verb/character_setup() //Log, disable log_debug("[key_name(src)] reloaded VChat.") + winset(src, null, "outputwindow.htmloutput.is-visible=false;outputwindow.oldoutput.is-visible=false;outputwindow.chatloadlabel.is-visible=true") //The hard way qdel_null(src.chatOutput) diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 54ad72349c..7d93e3ba2e 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -526,6 +526,25 @@ src.name = "Frosted Jelly Donut" reagents.add_reagent("sprinkles", 2) +/obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry + name = "Jelly Donut" + desc = "You jelly?" + icon_state = "jdonut1" + filling_color = "#ED1169" + center_of_mass = list("x"=16, "y"=11) + nutriment_amt = 3 + +/obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry/Initialize() + . = ..() + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("poisonberryjuice", 5) + bitesize = 5 + if(prob(30)) + src.icon_state = "jdonut2" + src.overlay_state = "box-donut2" + src.name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) + /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly name = "Jelly Donut" desc = "You jelly?" @@ -1121,9 +1140,16 @@ /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/Initialize() . = ..() - reagents.add_reagent("berryjuice", 5) bitesize = 3 +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/berry/Initialize() + . = ..() + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/poison/Initialize() + . = ..() + reagents.add_reagent("poisonberryjuice", 5) + /obj/item/weapon/reagent_containers/food/snacks/waffles name = "waffles" desc = "Mmm, waffles" @@ -3904,13 +3930,21 @@ filling_color = "#E0CF9B" center_of_mass = list("x"=17, "y"=4) nutriment_amt = 6 - nutriment_desc = list("sweetness" = 2, "muffin" = 2, "berries" = 2) + nutriment_desc = list("sweetness" = 2, "muffin" = 2) /obj/item/weapon/reagent_containers/food/snacks/berrymuffin/Initialize() . = ..() reagents.add_reagent("nutriment", 6) bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry/Initialize() + . = ..() + reagents.add_reagent("berryjuice", 3) + +/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/poison/Initialize() + . = ..() + reagents.add_reagent("poisonberryjuice", 3) + /obj/item/weapon/reagent_containers/food/snacks/ghostmuffin name = "booberry muffin" desc = "My stomach is a graveyard! No living being can quench my bloodthirst!" @@ -3925,6 +3959,16 @@ reagents.add_reagent("nutriment", 6) bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/berry/Initialize() + . = ..() + reagents.add_reagent("berryjuice", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison/Initialize() + . = ..() + reagents.add_reagent("poisonberryjuice", 3) + bitesize = 2 + /obj/item/weapon/reagent_containers/food/snacks/eggroll name = "egg roll" desc = "Free with orders over 10 thalers." diff --git a/code/modules/food/food/thecake.dm b/code/modules/food/food/thecake.dm index 3a9d9b8b7e..6c5b1ad580 100644 --- a/code/modules/food/food/thecake.dm +++ b/code/modules/food/food/thecake.dm @@ -1,280 +1,279 @@ -// Chaos cake - -/datum/recipe/microwave/chaoscake_layerone - reagents = list("flour" = 300,"milk" = 200, "sugar" = 100, "egg" = 30) - fruit = list("poisonberries" = 15, "cherries" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/, - /obj/item/weapon/reagent_containers/food/snacks/meat/, - /obj/item/weapon/reagent_containers/food/snacks/meat/, - /obj/item/weapon/reagent_containers/food/snacks/meat/ - ) - result = /obj/structure/chaoscake - -/datum/recipe/microwave/chaoscake_layertwo - reagents = list("flour" = 300, "milk" = 200, "sugar" = 100, "egg" = 30, ) - fruit = list("vanilla" = 15, "banana" = 15) - items = list( - /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/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/chaoscake_layer - -/datum/recipe/microwave/chaoscake_layerthree - reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "deathbell" = 100) - fruit = list("grapes" = 30) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/chaoscake_layer/three - -/datum/recipe/microwave/chaoscake_layerfour - reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "milkshake" = 300) - fruit = list("rice" = 30) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/chaoscake_layer/four - -/datum/recipe/microwave/chaoscake_layerfive - reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "blood" = 300) - fruit = list("tomato" = 20) - items = list() //supposed to be made with lobster, still has to be ported. - result = /obj/item/weapon/chaoscake_layer/five - -/datum/recipe/microwave/chaoscake_layersix - reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "sprinkles" = 10) - fruit = list("apple" = 30) - items = list( - /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/reagent_containers/food/snacks/chocolatebar, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar - ) - result = /obj/item/weapon/chaoscake_layer/six - -/datum/recipe/microwave/chaoscake_layerseven - reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "devilskiss" = 200) - fruit = list("potato" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/chaoscake_layer/seven - -/datum/recipe/microwave/chaoscake_layereight - reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "cream" = 200) - fruit = list("lemon" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/chaoscake_layer/eight - -/datum/recipe/microwave/chaoscake_layernine - reagents = list("water" = 100, "blood" = 100) - fruit = list("goldapple" = 50) - items = list() - result = /obj/item/weapon/chaoscake_layer/nine - -/obj/structure/chaoscake - name = "An unfinished cake" - desc = "A single layer of a strange cake, you can see the cherry paste ooze, but it feels very incomplete..." - - icon = 'icons/obj/food64x64.dmi' - icon_state = "chaoscake_unfinished-1" - pixel_x = -16 - - var/slices = 6 - var/maxslices = 6 - var/stage = 1 - var/maxstages = 9 - var/edible = 0 - - var/regentime = 1000 - var/interval = 0 - - var/static/list/desclist2 = list( - "The first layer of a strange cake, you can see the cherry paste ooze.", - "The second layer of the cake sits in place now, smelling of pear with delicious colourful cream.", - "The third layer of cake adds a strange purple layer, glazed over with frosting. It smells of grapes, but with a hint of something foul underneath.", - "With the fourth layer added the cake looks happier again. Reeking of vanilla, it brings up memories of childhood joy.", - "The fifth layer is extremely disturbing on that cake. Smelling of pure copper, it seems that bright blood clots are forming on top.", - "The cake is getting closer with the sixth layer added, the pink hue smelling of chocolate, with colourful sprinkles on top.", - "The first pair of triplets rest on the cake, despite being mostly similar to the first three, an evil aura becomes noticable.", - "The second pair of triplets rest on the cake, if you stand on the bright side, you can feel a good aura lifting your mood.", - "A chaos cake. Both a creation of dark and light, the two cakes are kept in a careful balance by that mystical coin in the middle. It's said its effects would dissipate if the balance is ever tipped in favour of one side too much, so both sides much be cut equally." - ) - -/obj/item/weapon/chaoscake_layer - name = "A layer of cake" - desc = "a layer of cake, it is made out of colourful cream." - icon = 'icons/obj/food.dmi' - icon_state = "chaoscake_layer-2" - var/layer_stage = 1 - -/obj/item/weapon/chaoscake_layer/three - desc = "a layer of cake, glazed in purple." - icon_state = "chaoscake_layer-3" - layer_stage = 2 - -/obj/item/weapon/chaoscake_layer/four - desc = "a layer of cake, reminding you of a colouring book." - icon_state = "chaoscake_layer-4" - layer_stage = 3 - -/obj/item/weapon/chaoscake_layer/five - desc = "A layer of cake, smells like copper." - icon_state = "chaoscake_layer-5" - layer_stage = 4 - -/obj/item/weapon/chaoscake_layer/six - desc = "A layer of cake, featuring colourful sprinkles." - icon_state = "chaoscake_layer-6" - layer_stage = 5 - -/obj/item/weapon/chaoscake_layer/seven - desc = "A triplet of evil cake parts." - icon_state = "chaoscake_layer-7" - layer_stage = 6 - -/obj/item/weapon/chaoscake_layer/eight - desc = "A triplet of good cake parts." - icon_state = "chaoscake_layer-8" - layer_stage = 7 - -/obj/item/weapon/chaoscake_layer/nine - name = "A coin of balance" - desc = "A very peculiar coin, it seems to stabilise the air around it." - icon_state = "chaoscake_layer-9" - layer_stage = 8 - -/obj/structure/chaoscake/proc/HasSliceMissing() - ..() - if(slices < maxslices) - if(interval >= regentime) - interval = 0 - slices++ - HasSliceMissing() - else - interval++ - HasSliceMissing() - else - return - -/obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice - name = "The Chaos Cake Slice" - desc = "A slice from The Chaos Cake, it pulses weirdly, as if angry to be seperated from the whole" - icon_state = "chaoscake_slice-1" - - center_of_mass = list("x"=16, "y"=10) - nutriment_desc = list() - nutriment_amt = 4 - volume = 80 - -/obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice/Initialize() - ..() - var/i = rand(1,6) - icon_state = "chaoscake_slice-[i]" - switch(i) - if(1) - name = "Slice Of Evil" //Pretty damn poisonous, takes a lot of work to make safe for consumption, useful for medical. - desc = "An odd slice, despite the grease and cherries oozing off the top, it smells delicious." - nutriment_desc = list("The desire to consume" = 10) // You won't even taste the poison. - reagents.add_reagent("neurotoxic_protein", 2) - reagents.add_reagent("shockchem", 2) - reagents.add_reagent("amatoxin", 2) - reagents.add_reagent("carpotoxin", 2) - reagents.add_reagent("spidertoxin", 2) - bitesize = 7 - if(2) - name = "Slice Of Evil" //A bad trip - desc = "A mysterious slice, coated in purple frosting that smells like grapes." - nutriment_desc = list("The desire to show off an party" = 10) - reagents.add_reagent("stoxin", 2) - reagents.add_reagent("space_drugs", 10) - reagents.add_reagent("serotrotium", 4) - reagents.add_reagent("cryptobiolin", 8) - reagents.add_reagent("mindbreaker", 10) - reagents.add_reagent("psilocybin", 10) - bitesize = 30 //even a single bite won't make you escape fate. - if(3) - name = "Slice Of Evil" //acidic - desc = "A menacing slice, smelling clearly of copper, blood clots float on top." - nutriment_desc = list("Infernal Rage" = 10) - reagents.add_reagent("blood", 20) - reagents.add_reagent("stomacid", 10) - reagents.add_reagent("mutagen", 4) - reagents.add_reagent("thirteenloko", 20) - reagents.add_reagent("hyperzine", 10) - bitesize = 30 - if(4) - name = "Slice Of Good" //anti-tox - desc = "A colourful slice, smelling of pear and coated in delicious cream." - nutriment_desc = list("Hapiness" = 10) - reagents.add_reagent("anti_toxin", 2) - reagents.add_reagent("tricordrazine", 2) - bitesize = 3 - if(5) - name = "Slice Of Good" //anti-oxy - desc = "A light slice, it's pretty to look at and smells of vanilla." - nutriment_desc = list("Freedom" = 10) - reagents.add_reagent("dexalinp", 2) - reagents.add_reagent("tricordrazine", 2) - bitesize = 3 - if(6) - name = "Slice Of Good" //anti-burn/brute - desc = "A hearty slice, it smells of chocolate and strawberries." - nutriment_desc = list("Love" = 10) - reagents.add_reagent("bicaridine", 2) - reagents.add_reagent("tricordrazine", 2) - reagents.add_reagent("kelotane", 2) - bitesize = 4 - -/obj/structure/chaoscake/attackby(var/obj/item/weapon/W, var/mob/living/user) - if(istype(W,/obj/item/weapon/material/knife)) - if(edible == 1) - HasSliceMissing() - if(slices <= 0) - to_chat(user, "The cake hums away quietly as the chaos powered goodness slowly recovers the large amount of lost mass, best to give it a moment before cutting another slice.") - return - else - to_chat(user, "You cut a slice of the cake. The slice looks like the cake was just baked, and you can see before your eyes as the spot where you cut the slice slowly regenerates!") - slices = slices - 1 - icon_state = "chaoscake-[slices]" - new /obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice(src.loc) - - else - to_chat(user, "It looks so good... But it feels so wrong to eat it before it's finished...") - return - if(istype(W,/obj/item/weapon/chaoscake_layer)) - var/obj/item/weapon/chaoscake_layer/C = W - if(C.layer_stage == 8) - to_chat(user, "Finally! The coin on the top, the almighty chaos cake is complete!") - qdel(W) - stage++ - desc = desclist2[stage] - icon_state = "chaoscake-6" - edible = 1 - name = "The Chaos Cake!" - else if(stage == maxstages) - to_chat(user, "The cake is already done!") - else if(stage == C.layer_stage) - to_chat(user, "You add another layer to the cake, nice.") - qdel(W) - stage++ - desc = desclist2[stage] - icon_state = "chaoscake_stage-[stage]" - else - to_chat(user, "Hmm, doesnt seem like this layer is supposed to be added there?") - +// Chaos cake + +/datum/recipe/microwave/chaoscake_layerone + reagents = list("flour" = 300,"milk" = 200, "sugar" = 100, "egg" = 30) + fruit = list("poisonberries" = 15, "cherries" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/, + /obj/item/weapon/reagent_containers/food/snacks/meat/, + /obj/item/weapon/reagent_containers/food/snacks/meat/, + /obj/item/weapon/reagent_containers/food/snacks/meat/ + ) + result = /obj/structure/chaoscake + +/datum/recipe/microwave/chaoscake_layertwo + reagents = list("flour" = 300, "milk" = 200, "sugar" = 100, "egg" = 30, ) + fruit = list("vanilla" = 15, "banana" = 15) + items = list( + /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/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/chaoscake_layer + +/datum/recipe/microwave/chaoscake_layerthree + reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "deathbell" = 100) + fruit = list("grapes" = 30) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/chaoscake_layer/three + +/datum/recipe/microwave/chaoscake_layerfour + reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "milkshake" = 300) + fruit = list("rice" = 30) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/chaoscake_layer/four + +/datum/recipe/microwave/chaoscake_layerfive + reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "blood" = 300) + fruit = list("tomato" = 20) + items = list() //supposed to be made with lobster, still has to be ported. + result = /obj/item/weapon/chaoscake_layer/five + +/datum/recipe/microwave/chaoscake_layersix + reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "sprinkles" = 10) + fruit = list("apple" = 30) + items = list( + /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/reagent_containers/food/snacks/chocolatebar, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar + ) + result = /obj/item/weapon/chaoscake_layer/six + +/datum/recipe/microwave/chaoscake_layerseven + reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "devilskiss" = 200) + fruit = list("potato" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/chaoscake_layer/seven + +/datum/recipe/microwave/chaoscake_layereight + reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "cream" = 200) + fruit = list("lemon" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/chaoscake_layer/eight + +/datum/recipe/microwave/chaoscake_layernine + reagents = list("water" = 100, "blood" = 100) + fruit = list("goldapple" = 50) + items = list() + result = /obj/item/weapon/chaoscake_layer/nine + +/obj/structure/chaoscake + name = "An unfinished cake" + desc = "A single layer of a strange cake, you can see the cherry paste ooze, but it feels very incomplete..." + + icon = 'icons/obj/food64x64.dmi' + icon_state = "chaoscake_unfinished-1" + pixel_x = -16 + + var/slices = 6 + var/maxslices = 6 + var/stage = 1 + var/maxstages = 9 + var/edible = 0 + + var/regentime = 1000 + var/interval = 0 + + var/static/list/desclist2 = list( + "The first layer of a strange cake, you can see the cherry paste ooze.", + "The second layer of the cake sits in place now, smelling of pear with delicious colourful cream.", + "The third layer of cake adds a strange purple layer, glazed over with frosting. It smells of grapes, but with a hint of something foul underneath.", + "With the fourth layer added the cake looks happier again. Reeking of vanilla, it brings up memories of childhood joy.", + "The fifth layer is extremely disturbing on that cake. Smelling of pure copper, it seems that bright blood clots are forming on top.", + "The cake is getting closer with the sixth layer added, the pink hue smelling of chocolate, with colourful sprinkles on top.", + "The first pair of triplets rest on the cake, despite being mostly similar to the first three, an evil aura becomes noticable.", + "The second pair of triplets rest on the cake, if you stand on the bright side, you can feel a good aura lifting your mood.", + "A chaos cake. Both a creation of dark and light, the two cakes are kept in a careful balance by that mystical coin in the middle. It's said its effects would dissipate if the balance is ever tipped in favour of one side too much, so both sides much be cut equally." + ) + +/obj/item/weapon/chaoscake_layer + name = "A layer of cake" + desc = "a layer of cake, it is made out of colourful cream." + icon = 'icons/obj/food.dmi' + icon_state = "chaoscake_layer-2" + var/layer_stage = 1 + +/obj/item/weapon/chaoscake_layer/three + desc = "a layer of cake, glazed in purple." + icon_state = "chaoscake_layer-3" + layer_stage = 2 + +/obj/item/weapon/chaoscake_layer/four + desc = "a layer of cake, reminding you of a colouring book." + icon_state = "chaoscake_layer-4" + layer_stage = 3 + +/obj/item/weapon/chaoscake_layer/five + desc = "A layer of cake, smells like copper." + icon_state = "chaoscake_layer-5" + layer_stage = 4 + +/obj/item/weapon/chaoscake_layer/six + desc = "A layer of cake, featuring colourful sprinkles." + icon_state = "chaoscake_layer-6" + layer_stage = 5 + +/obj/item/weapon/chaoscake_layer/seven + desc = "A triplet of evil cake parts." + icon_state = "chaoscake_layer-7" + layer_stage = 6 + +/obj/item/weapon/chaoscake_layer/eight + desc = "A triplet of good cake parts." + icon_state = "chaoscake_layer-8" + layer_stage = 7 + +/obj/item/weapon/chaoscake_layer/nine + name = "A coin of balance" + desc = "A very peculiar coin, it seems to stabilise the air around it." + icon_state = "chaoscake_layer-9" + layer_stage = 8 + +/obj/structure/chaoscake/proc/HasSliceMissing() + ..() + if(slices < maxslices) + if(interval >= regentime) + interval = 0 + slices++ + HasSliceMissing() + else + interval++ + HasSliceMissing() + else + return + +/obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice + name = "The Chaos Cake Slice" + desc = "A slice from The Chaos Cake, it pulses weirdly, as if angry to be seperated from the whole" + icon_state = "chaoscake_slice-1" + + center_of_mass = list("x"=16, "y"=10) + nutriment_desc = list() + nutriment_amt = 4 + volume = 80 + +/obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice/Initialize() + ..() + var/i = rand(1,6) + icon_state = "chaoscake_slice-[i]" + switch(i) + if(1) + name = "Slice Of Evil" //Pretty damn poisonous, takes a lot of work to make safe for consumption, useful for medical. + desc = "An odd slice, despite the grease and cherries oozing off the top, it smells delicious." + nutriment_desc = list("The desire to consume" = 10) // You won't even taste the poison. + reagents.add_reagent("neurotoxic_protein", 2) + reagents.add_reagent("shockchem", 2) + reagents.add_reagent("amatoxin", 2) + reagents.add_reagent("carpotoxin", 2) + reagents.add_reagent("spidertoxin", 2) + bitesize = 7 + if(2) + name = "Slice Of Evil" //A bad trip + desc = "A mysterious slice, coated in purple frosting that smells like grapes." + nutriment_desc = list("The desire to show off an party" = 10) + reagents.add_reagent("stoxin", 2) + reagents.add_reagent("space_drugs", 10) + reagents.add_reagent("serotrotium", 4) + reagents.add_reagent("cryptobiolin", 8) + reagents.add_reagent("mindbreaker", 10) + reagents.add_reagent("psilocybin", 10) + bitesize = 30 //even a single bite won't make you escape fate. + if(3) + name = "Slice Of Evil" //acidic + desc = "A menacing slice, smelling clearly of copper, blood clots float on top." + nutriment_desc = list("Infernal Rage" = 10) + reagents.add_reagent("blood", 20) + reagents.add_reagent("stomacid", 10) + reagents.add_reagent("mutagen", 4) + reagents.add_reagent("thirteenloko", 20) + reagents.add_reagent("hyperzine", 10) + bitesize = 30 + if(4) + name = "Slice Of Good" //anti-tox + desc = "A colourful slice, smelling of pear and coated in delicious cream." + nutriment_desc = list("Hapiness" = 10) + reagents.add_reagent("anti_toxin", 2) + reagents.add_reagent("tricordrazine", 2) + bitesize = 3 + if(5) + name = "Slice Of Good" //anti-oxy + desc = "A light slice, it's pretty to look at and smells of vanilla." + nutriment_desc = list("Freedom" = 10) + reagents.add_reagent("dexalinp", 2) + reagents.add_reagent("tricordrazine", 2) + bitesize = 3 + if(6) + name = "Slice Of Good" //anti-burn/brute + desc = "A hearty slice, it smells of chocolate and strawberries." + nutriment_desc = list("Love" = 10) + reagents.add_reagent("bicaridine", 2) + reagents.add_reagent("tricordrazine", 2) + reagents.add_reagent("kelotane", 2) + bitesize = 4 + +/obj/structure/chaoscake/attackby(var/obj/item/weapon/W, var/mob/living/user) + if(istype(W,/obj/item/weapon/material/knife)) + if(edible == 1) + HasSliceMissing() + if(slices <= 0) + to_chat(user, "The cake hums away quietly as the chaos powered goodness slowly recovers the large amount of lost mass, best to give it a moment before cutting another slice.") + return + else + to_chat(user, "You cut a slice of the cake. The slice looks like the cake was just baked, and you can see before your eyes as the spot where you cut the slice slowly regenerates!") + slices = slices - 1 + icon_state = "chaoscake-[slices]" + new /obj/item/weapon/reagent_containers/food/snacks/chaoscakeslice(src.loc) + + else + to_chat(user, "It looks so good... But it feels so wrong to eat it before it's finished...") + return + if(istype(W,/obj/item/weapon/chaoscake_layer)) + var/obj/item/weapon/chaoscake_layer/C = W + if(C.layer_stage == 8) + to_chat(user, "Finally! The coin on the top, the almighty chaos cake is complete!") + qdel(W) + stage++ + desc = desclist2[stage] + icon_state = "chaoscake-6" + edible = 1 + name = "The Chaos Cake!" + else if(stage == maxstages) + to_chat(user, "The cake is already done!") + else if(stage == C.layer_stage) + to_chat(user, "You add another layer to the cake, nice.") + qdel(W) + stage++ + desc = desclist2[stage] + icon_state = "chaoscake_unfinished-[stage]" + else + to_chat(user, "Hmm, doesnt seem like this layer is supposed to be added there?") diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 1e16f7470d..4f6e5adede 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -55,6 +55,13 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly +/datum/recipe/microwave/jellydonut/poisonberry + reagents = list("poisonberryjuice" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry + /datum/recipe/microwave/jellydonut/slime reagents = list("slimejelly" = 5, "sugar" = 5) items = list( @@ -308,7 +315,14 @@ I said no! items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, ) - result = /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis + result = /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/berry + +/datum/recipe/microwave/poisonberryclafoutis + fruit = list("poisonberries" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/poison /datum/recipe/microwave/wingfangchu reagents = list("soysauce" = 5) @@ -639,7 +653,7 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich /datum/recipe/microwave/peanutbutterjellysandwich - reagents = list("berryjuice" = 5, "peanutbutter" = 5) + reagents = list("cherryjelly" = 5, "peanutbutter" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, /obj/item/weapon/reagent_containers/food/snacks/slice/bread @@ -1106,7 +1120,15 @@ I said no! /obj/item/weapon/reagent_containers/food/snacks/dough ) fruit = list("berries" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/berrymuffin + result = /obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry + +/datum/recipe/microwave/poisonberrymuffin + reagents = list("milk" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + fruit = list("poisonberries" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/berrymuffin/poison /datum/recipe/microwave/ghostmuffin reagents = list("milk" = 5, "sugar" = 5) @@ -1115,7 +1137,16 @@ I said no! /obj/item/weapon/ectoplasm ) fruit = list("berries" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/ghostmuffin + result = /obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/berry + +/datum/recipe/microwave/poisonghostmuffin + reagents = list("milk" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/ectoplasm + ) + fruit = list("poisonberries" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison /datum/recipe/microwave/eggroll reagents = list("soysauce" = 10) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 0a25a1fae1..1692de2f65 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -157,12 +157,8 @@ overlays |= plant_icon /obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = M - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(M.is_incorporeal()) + return if(seed && seed.get_trait(TRAIT_JUICY) == 2) if(istype(M)) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index f08720cae2..4c18c2aac3 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -80,6 +80,7 @@ /datum/seed/berry/poison name = "poisonberries" seed_name = "poison berry" + kitchen_tag = "poisonberries" display_name = "poison berry bush" mutants = list("deathberries") chems = list("nutriment" = list(1), "toxin" = list(3,5), "poisonberryjuice" = list(10,5)) diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index bab7131466..8c694c8b00 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -20,12 +20,8 @@ manual_unbuckle(user) /obj/effect/plant/Crossed(atom/movable/O) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = O - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(O.is_incorporeal()) + return if(isliving(O)) trodden_on(O) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index cc9c678b97..743a0d8e2b 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -22,7 +22,7 @@ /turf/proc/lighting_clear_overlay() if(lighting_overlay) - qdel(lighting_overlay) + qdel(lighting_overlay, force = TRUE) for(var/datum/lighting_corner/C in corners) C.update_active() diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index 1ae9b7f7b0..903dc58b8d 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -39,6 +39,9 @@ if (SSatoms.initialized == INITIALIZATION_INSSATOMS) return // let proper initialisation handle it later + var/prev_shuttle_queue_state = SSshuttles.block_init_queue + SSshuttles.block_init_queue = TRUE + var/list/atom/atoms = list() var/list/area/areas = list() var/list/obj/structure/cable/cables = list() @@ -71,6 +74,9 @@ var/area/A = I A.power_change() + SSshuttles.block_init_queue = prev_shuttle_queue_state + SSshuttles.process_init_queues() // We will flush the queue unless there were other blockers, in which case they will do it. + admin_notice("Submap initializations finished.", R_DEBUG) /datum/map_template/proc/load_new_z(var/centered = FALSE, var/orientation = 0) diff --git a/code/modules/mining/shelter_atoms_vr.dm b/code/modules/mining/shelter_atoms_vr.dm new file mode 100644 index 0000000000..664b0cff51 --- /dev/null +++ b/code/modules/mining/shelter_atoms_vr.dm @@ -0,0 +1,13 @@ +/obj/structure/fans/hardlight + name = "hardlight shield" + desc = "Retains air, allows passage." + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + density = FALSE + icon = 'icons/effects/effects_vr.dmi' + icon_state = "hardlight" + buildstackamount = 2 + + light_range = 3 + light_power = 1 + light_color = "#FFFFFF" \ No newline at end of file diff --git a/code/modules/mob/_modifiers/fire.dm b/code/modules/mob/_modifiers/fire.dm new file mode 100644 index 0000000000..d69a35c2ec --- /dev/null +++ b/code/modules/mob/_modifiers/fire.dm @@ -0,0 +1,36 @@ +// Ignition, but confined to the modifier system. +// This makes it more predictable and thus, easier to balance. +/datum/modifier/fire + name = "on fire" + desc = "You are on fire! You will be harmed until the fire goes out or you extinguish it with water." + mob_overlay_state = "on_fire" + + on_created_text = "You burst into flames!" + on_expired_text = "The fire starts to fade." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + var/damage_per_tick = 5 + +/datum/modifier/fire/intense + mob_overlay_state = "on_fire_intense" + damage_per_tick = 10 + +/datum/modifier/fire/tick() + holder.inflict_heat_damage(damage_per_tick) + +/* + * Modifier used by projectiles, like the flamethrower, that rely heavily on fire_stacks to persist. + */ + +/datum/modifier/fire/stack_managed/tick() + ..() + + if(!holder.fire_stacks || holder.fire_stacks < 0) + if(prob(10)) + expire() + + else if(holder.fire_stacks > 0) + holder.fire_stacks -= 1 + +/datum/modifier/fire/stack_managed/intense + mob_overlay_state = "on_fire_intense" + damage_per_tick = 10 diff --git a/code/modules/mob/_modifiers/modifiers_misc.dm b/code/modules/mob/_modifiers/modifiers_misc.dm index af6eaa952e..9d87088dae 100644 --- a/code/modules/mob/_modifiers/modifiers_misc.dm +++ b/code/modules/mob/_modifiers/modifiers_misc.dm @@ -224,28 +224,6 @@ the artifact triggers the rage. accuracy_dispersion = 2 // A combination of fear and immense pain or damage reults in a twitching firing arm. Flee. - - -// Ignition, but confined to the modifier system. -// This makes it more predictable and thus, easier to balance. -/datum/modifier/fire - name = "on fire" - desc = "You are on fire! You will be harmed until the fire goes out or you extinguish it with water." - mob_overlay_state = "on_fire" - - on_created_text = "You combust into flames!" - on_expired_text = "The fire starts to fade." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - var/damage_per_tick = 5 - -/datum/modifier/fire/intense - mob_overlay_state = "on_fire_intense" - damage_per_tick = 10 - -/datum/modifier/fire/tick() - holder.inflict_heat_damage(damage_per_tick) - - // Applied when near something very cold. // Reduces mobility, attack speed. /datum/modifier/chilled diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index b1c5cce255..7ccbd1b84f 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -88,23 +88,26 @@ desc = "Shadekin seem to always know what the others are thinking. This is probably why." speech_verb = "mars" ask_verb = "mars" - exclaim_verb = "mars" + exclaim_verb = "MARS" colour = "changeling" key = "m" machine_understands = FALSE flags = WHITELISTED | HIVEMIND -/datum/language/human/slavic +/datum/language/slavic name = LANGUAGE_SLAVIC desc = "The official language of the Independent Colonial Confederation of Gilgamesh, originally established in 2122 by the short-lived United Slavic Confederation on Earth." - colour = "solcom" - key = "r" - + speech_verb = "govorit" // All Russian for "says" "asks" and "shouts". Mostly here as a joke. + ask_verb = "sprashivaet" + exclaim_verb = "krichit" + whisper_verb = "shepchet" + colour = "attack" // Red for slav! + key = "s" syllables = list( - "rus", "zem", "ave", "groz", "ski", "ska", "ven", "konst", "pol", "lin", "svy", - "danya", "da", "mied", "zan", "das", "krem", "myka", "to", "st", "no", "na", "ni", - "ko", "ne", "en", "po", "ra", "li", "on", "byl", "cto", "eni", "ost", "ol", "ego", - "ver", "stv", "pro" + "rus", "zem", "ave", "blyat", "cyk", "groz", "ski", "ska", "ven", "konst", "pol", "lin", "svy", + "danya", "da", "mied", "kuz,", "zan", "das", "krem", "myka", "to", "st", "no", "na", "ni", + "ko", "ne", "en", "po", "tro", "ra", "li", "on", "byl", "cto", "eni", "ost", "ol", "ego", + "ver", "stv", "pro", "ski" ) /datum/language/unathi @@ -113,8 +116,6 @@ flags = 0 /datum/language/skrell flags = 0 -/datum/language/human - flags = 0 /datum/language/seromi flags = 0 /datum/language/zaddat diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6d9bc28f77..d1bd905d4d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -243,12 +243,8 @@ // this handles mulebots and vehicles // and now mobs on fire /mob/living/carbon/human/Crossed(var/atom/movable/AM) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(AM.is_incorporeal()) + return if(istype(AM, /mob/living/bot/mulebot)) var/mob/living/bot/mulebot/MB = AM MB.runOver(src) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 9f57be114b..50caac91c0 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -224,10 +224,8 @@ // Handle footstep sounds /mob/living/carbon/human/handle_footstep(var/turf/T) - //VOREStation Edit begin: SHADEKIN - if(shadekin_phasing_check()) + if(is_incorporeal()) return - //VOREStation Edit end: SHADEKIN if(!config.footstep_volume || !T.footstep_sounds || !T.footstep_sounds.len) return // Future Upgrades - Multi species support diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 568e978f72..3a44c18bd3 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -618,10 +618,8 @@ //Stuff like the xenomorph's plasma regen happens here. species.handle_environment_special(src) - //VOREStation Edit begin: SHADEKIN - if(shadekin_phasing_check()) + if(is_incorporeal()) return - //VOREStation Edit end: SHADEKIN //Moved pressure calculations here for use in skip-processing check. var/pressure = environment.return_pressure() diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm index 7d354db330..cc69297e6a 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm @@ -1,5 +1,10 @@ /datum/power/shadekin +/mob/living/carbon/human/is_incorporeal() + if(ability_flags & AB_PHASE_SHIFTED) //Shadekin + return TRUE + return ..() + ///////////////////// /// PHASE SHIFT /// ///////////////////// @@ -62,6 +67,7 @@ //Shifting in if(ability_flags & AB_PHASE_SHIFTED) ability_flags &= ~AB_PHASE_SHIFTED + mouse_opacity = 2 name = real_name for(var/belly in vore_organs) var/obj/belly/B = belly @@ -108,6 +114,7 @@ //Shifting out else ability_flags |= AB_PHASE_SHIFTED + mouse_opacity = 0 custom_emote(1,"phases out!") name = "Something" @@ -130,47 +137,6 @@ density = FALSE force_max_speed = TRUE -/mob/living/carbon/human/UnarmedAttack() - if(shadekin_phasing_check()) - return FALSE //Nope. - - . = ..() - -/mob/living/carbon/human/can_fall() - if(shadekin_phasing_check()) - return FALSE //Nope! - - return ..() - -/mob/living/carbon/human/zMove(direction) - if(shadekin_phasing_check()) - var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) - if(destination) - forceMove(destination) - return TRUE //Yup. - - return ..() - -/mob/proc/shadekin_phasing_check() - var/mob/living/simple_mob/shadekin/s_SK = src - if(istype(s_SK)) - if(s_SK.ability_flags & AB_PHASE_SHIFTED) - return TRUE - var/mob/living/carbon/human/h_SK = src - if(istype(h_SK)) - if(h_SK.ability_flags & AB_PHASE_SHIFTED) - return TRUE - return FALSE - -/* -/mob/living/carbon/human/MouseDrop_T(atom/dropping, mob/user) - if(ability_flags & AB_PHASE_SHIFTED) - return FALSE //Nope! - - return ..() -*/ - - ////////////////////////// /// REGENERATE OTHER /// ////////////////////////// diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 1d806dde45..aeab794552 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -109,5 +109,9 @@ if(drowsy) apply_effect(drowsy, DROWSY, blocked) if(agony) apply_effect(agony, AGONY, blocked) if(flammable) adjust_fire_stacks(flammable) - if(ignite) IgniteMob() + if(ignite) + if(ignite >= 3) + add_modifier(/datum/modifier/fire/stack_managed/intense, 60 SECONDS) + else + add_modifier(/datum/modifier/fire/stack_managed, 45 * ignite SECONDS) return 1 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index dc37871aca..a5e58e2510 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -54,13 +54,9 @@ icon_rest = "mouse_[body_color]_sleep" desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself." -/mob/living/simple_mob/animal/passive/mouse/Crossed(AM as mob|obj) - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN +/mob/living/simple_mob/animal/passive/mouse/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return if( ishuman(AM) ) if(!stat) var/mob/M = AM diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm index 21e0683b3c..491d0011d2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm @@ -19,6 +19,7 @@ //Shifting in if(ability_flags & AB_PHASE_SHIFTED) ability_flags &= ~AB_PHASE_SHIFTED + mouse_opacity = 2 name = real_name for(var/belly in vore_organs) var/obj/belly/B = belly @@ -70,6 +71,7 @@ //Shifting out else ability_flags |= AB_PHASE_SHIFTED + mouse_opacity = 0 custom_emote(1,"phases out!") real_name = name name = "Something" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index f8025167b7..a494d00590 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -245,6 +245,11 @@ if((. = ..())) handle_shade() +/mob/living/simple_mob/shadekin/is_incorporeal() + if(ability_flags & AB_PHASE_SHIFTED) + return TRUE + return FALSE + /mob/living/simple_mob/shadekin/handle_atmos() if(ability_flags & AB_PHASE_SHIFTED) return diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index fae3f2cb61..0e4a326cab 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -389,10 +389,8 @@ ///Return 1 for movement 0 for none /mob/proc/Process_Spacemove(var/check_drift = 0) - //VOREStation Edit begin: SHADEKIN - if(shadekin_phasing_check()) + if(is_incorporeal()) return - //VOREStation Edit end: SHADEKIN if(!Check_Dense_Object()) //Nothing to push off of so end here update_floating(0) diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 59ef1182d0..fdcd6c7a64 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -29,6 +29,10 @@ to_chat(src, "There is nothing of interest in this direction.") return 0 + if(is_incorporeal()) + forceMove(destination) + return 1 + if(!start.CanZPass(src, direction)) to_chat(src, "\The [start] is in the way.") return 0 @@ -124,7 +128,7 @@ /mob/living/can_ztravel() if(incapacitated()) return FALSE - return hovering + return (hovering || is_incorporeal()) /mob/living/carbon/human/can_ztravel() if(incapacitated()) @@ -273,6 +277,8 @@ return FALSE /mob/living/can_fall() + if(is_incorporeal()) + return FALSE if(hovering) return FALSE return ..() @@ -582,4 +588,4 @@ // And hurt the floor. if(istype(hit_atom, /turf/simulated/floor)) var/turf/simulated/floor/ground = hit_atom - ground.break_tile() \ No newline at end of file + ground.break_tile() diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index b3ea2c17ff..282fb76056 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -150,6 +150,9 @@ var/turf/below = GetBelow(src) return !below || below.is_space() +/turf/simulated/open/is_solid_structure() + return locate(/obj/structure/lattice, src) //counts as solid structure if it has a lattice (same as space) + /turf/simulated/open/is_safe_to_enter(mob/living/L) if(L.can_fall()) if(!locate(/obj/structure/stairs) in GetBelow(src)) diff --git a/code/modules/overmap/_defines.dm b/code/modules/overmap/_defines.dm index 6d17d8e398..a272ab7591 100644 --- a/code/modules/overmap/_defines.dm +++ b/code/modules/overmap/_defines.dm @@ -3,6 +3,57 @@ //How far from the edge of overmap zlevel could randomly placed objects spawn #define OVERMAP_EDGE 7 + + +//Dimension of overmap (squares 4 lyfe) +var/global/list/map_sectors = list() + +/area/overmap/ + name = "System Map" + icon_state = "start" + requires_power = 0 + base_turf = /turf/unsimulated/map + +/turf/unsimulated/map + icon = 'icons/turf/space.dmi' + icon_state = "map" + +/turf/unsimulated/map/edge + opacity = 1 + density = 1 + +/turf/unsimulated/map/New() + ..() + name = "[x]-[y]" + var/list/numbers = list() + + if(x == 1 || x == global.using_map.overmap_size) + numbers += list("[round(y/10)]","[round(y%10)]") + if(y == 1 || y == global.using_map.overmap_size) + numbers += "-" + if(y == 1 || y == global.using_map.overmap_size) + numbers += list("[round(x/10)]","[round(x%10)]") + + for(var/i = 1 to numbers.len) + var/image/I = image('icons/effects/numbers.dmi',numbers[i]) + I.pixel_x = 5*i - 2 + I.pixel_y = world.icon_size/2 - 3 + if(y == 1) + I.pixel_y = 3 + I.pixel_x = 5*i + 4 + if(y == global.using_map.overmap_size) + I.pixel_y = world.icon_size - 9 + I.pixel_x = 5*i + 4 + if(x == 1) + I.pixel_x = 5*i - 2 + if(x == global.using_map.overmap_size) + I.pixel_x = 5*i + 2 + overlays += I + + + + + //list used to track which zlevels are being 'moved' by the proc below var/list/moving_levels = list() //Proc to 'move' stars in spess @@ -35,6 +86,7 @@ proc/toggle_move_stars(zlevel, direction) AM.throw_at(get_step(T,reverse_direction(direction)), 5, 1) +/* //list used to cache empty zlevels to avoid nedless map bloat var/list/cached_space = list() @@ -99,3 +151,4 @@ proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A) testing("Catching [M] for future use") source.loc = null cached_space += source +*/ \ No newline at end of file diff --git a/code/modules/overmap/overmap_object.dm b/code/modules/overmap/overmap_object.dm new file mode 100644 index 0000000000..9db73eff63 --- /dev/null +++ b/code/modules/overmap/overmap_object.dm @@ -0,0 +1,39 @@ +/obj/effect/overmap + name = "map object" + icon = 'icons/obj/overmap.dmi' + icon_state = "object" + + var/known = 1 //shows up on nav computers automatically + var/scannable //if set to TRUE will show up on ship sensors for detailed scans + +//Overlay of how this object should look on other skyboxes +/obj/effect/overmap/proc/get_skybox_representation() + return + +/obj/effect/overmap/proc/get_scan_data(mob/user) + return desc + +/obj/effect/overmap/Initialize() + . = ..() + if(!global.using_map.use_overmap) + return INITIALIZE_HINT_QDEL + + if(known) + //layer = ABOVE_LIGHTING_LAYER + plane = PLANE_LIGHTING_ABOVE + // TODO - Leshana HELM + // for(var/obj/machinery/computer/ship/helm/H in global.machines) + // H.get_known_sectors() +/* +TODO - Leshana - No need for this, we don't have skyboxes +/obj/effect/overmap/Crossed(var/obj/effect/overmap/visitable/other) + if(istype(other)) + for(var/obj/effect/overmap/visitable/O in loc) + SSskybox.rebuild_skyboxes(O.map_z) + +/obj/effect/overmap/Uncrossed(var/obj/effect/overmap/visitable/other) + if(istype(other)) + SSskybox.rebuild_skyboxes(other.map_z) + for(var/obj/effect/overmap/visitable/O in loc) + SSskybox.rebuild_skyboxes(O.map_z) +*/ \ No newline at end of file diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 5309b05096..15393a5be1 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -1,124 +1,136 @@ - //=================================================================================== -//Hook for building overmap +//Overmap object representing zlevel(s) //=================================================================================== -var/global/list/map_sectors = list() - -/hook/startup/proc/build_map() - if(!config.use_overmap) - return 1 - 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 +/obj/effect/overmap/visitable 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 + scannable = TRUE -/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) + var/list/map_z = list() - if(data.landing_area) - shuttle_landing = locate(data.landing_area) + var/list/initial_generic_waypoints //store landmark_tag of landmarks that should be added to the actual lists below on init. + var/list/initial_restricted_waypoints //For use with non-automatic landmarks (automatic ones add themselves). -/obj/effect/map/CanPass(atom/movable/A) - testing("[A] attempts to enter sector\"[name]\"") - return 1 + var/list/generic_waypoints = list() //waypoints that any shuttle can use + var/list/restricted_waypoints = list() //waypoints for specific shuttles + var/docking_codes -/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 + var/start_x //Coordinates for self placing + var/start_y //will use random values if unset -/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 + var/base = 0 //starting sector, counts as station_levels + var/in_space = 1 //can be accessed via lucky EVA -/obj/effect/map/sector + var/hide_from_reports = FALSE + + var/has_distress_beacon + +/obj/effect/overmap/visitable/Initialize() + . = ..() + if(. == INITIALIZE_HINT_QDEL) + return + + find_z_levels() // This populates map_z and assigns z levels to the ship. + register_z_levels() // This makes external calls to update global z level information. + + if(!global.using_map.overmap_z) + build_overmap() + + start_x = start_x || rand(OVERMAP_EDGE, global.using_map.overmap_size - OVERMAP_EDGE) + start_y = start_y || rand(OVERMAP_EDGE, global.using_map.overmap_size - OVERMAP_EDGE) + + forceMove(locate(start_x, start_y, global.using_map.overmap_z)) + + docking_codes = "[ascii2text(rand(65,90))][ascii2text(rand(65,90))][ascii2text(rand(65,90))][ascii2text(rand(65,90))]" + + testing("Located sector \"[name]\" at [start_x],[start_y], containing Z [english_list(map_z)]") + + LAZYADD(SSshuttles.sectors_to_initialize, src) //Queued for further init. Will populate the waypoint lists; waypoints not spawned yet will be added in as they spawn. + SSshuttles.process_init_queues() + +//This is called later in the init order by SSshuttles to populate sector objects. Importantly for subtypes, shuttles will be created by then. +/obj/effect/overmap/visitable/proc/populate_sector_objects() + +// TODO - Leshana - Implement +///obj/effect/overmap/visitable/proc/get_areas() +// return get_filtered_areas(list(/proc/area_belongs_to_zlevels = map_z)) + +/obj/effect/overmap/visitable/proc/find_z_levels() + map_z = GetConnectedZlevels(z) + +/obj/effect/overmap/visitable/proc/register_z_levels() + for(var/zlevel in map_z) + map_sectors["[zlevel]"] = src + + global.using_map.player_levels |= map_z + if(!in_space) + global.using_map.sealed_levels |= map_z + if(base) + global.using_map.station_levels |= map_z + global.using_map.contact_levels |= map_z + global.using_map.map_levels |= map_z + +//Helper for init. +/obj/effect/overmap/visitable/proc/check_ownership(obj/object) + if((object.z in map_z) && !(get_area(object) in SSshuttles.shuttle_areas)) + return 1 + +//If shuttle_name is false, will add to generic waypoints; otherwise will add to restricted. Does not do checks. +/obj/effect/overmap/visitable/proc/add_landmark(obj/effect/shuttle_landmark/landmark, shuttle_name) + landmark.sector_set(src, shuttle_name) + if(shuttle_name) + LAZYADD(restricted_waypoints[shuttle_name], landmark) + else + generic_waypoints += landmark + +/obj/effect/overmap/visitable/proc/remove_landmark(obj/effect/shuttle_landmark/landmark, shuttle_name) + if(shuttle_name) + var/list/shuttles = restricted_waypoints[shuttle_name] + LAZYREMOVE(shuttles, landmark) + else + generic_waypoints -= landmark + +/obj/effect/overmap/visitable/proc/get_waypoints(var/shuttle_name) + . = list() + for(var/obj/effect/overmap/visitable/contained in src) + . += contained.get_waypoints(shuttle_name) + for(var/thing in generic_waypoints) + .[thing] = name + if(shuttle_name in restricted_waypoints) + for(var/thing in restricted_waypoints[shuttle_name]) + .[thing] = name + +/obj/effect/overmap/visitable/proc/generate_skybox() + return + +/obj/effect/overmap/visitable/sector name = "generic sector" desc = "Sector with some stuff in it." + icon_state = "sector" anchored = 1 -//Space stragglers go here +// Because of the way these are spawned, they will potentially have their invisibility adjusted by the turfs they are mapped on +// prior to being moved to the overmap. This blocks that. Use set_invisibility to adjust invisibility as needed instead. +/obj/effect/overmap/visitable/sector/hide() -/obj/effect/map/sector/temporary - name = "Deep Space" - icon_state = "" - always_known = 0 +/proc/build_overmap() + if(!global.using_map.use_overmap) + return 1 -/obj/effect/map/sector/temporary/New(var/nx, var/ny, var/nz) - loc = locate(nx, ny, OVERMAP_ZLEVEL) - map_z = nz - map_sectors["[map_z]"] = src - testing("Temporary sector at [x],[y] was created, corresponding zlevel is [map_z].") + testing("Building overmap...") + world.maxz++ + global.using_map.overmap_z = world.maxz -/obj/effect/map/sector/temporary/Destroy() - map_sectors["[map_z]"] = null - testing("Temporary sector at [x],[y] was deleted.") - if (can_die()) - testing("Associated zlevel disappeared.") - world.maxz-- + testing("Putting overmap on [global.using_map.overmap_z]") + var/area/overmap/A = new + for (var/square in block(locate(1,1,global.using_map.overmap_z), locate(global.using_map.overmap_size,global.using_map.overmap_size,global.using_map.overmap_z))) + var/turf/T = square + if(T.x == global.using_map.overmap_size || T.y == global.using_map.overmap_size) + T = T.ChangeTurf(/turf/unsimulated/map/edge) + else + T = T.ChangeTurf(/turf/unsimulated/map) + ChangeArea(T, A) -/obj/effect/map/sector/temporary/proc/can_die(var/mob/observer) - testing("Checking if sector at [map_z] can die.") - for(var/mob/M in player_list) - if(M != observer && M.z == map_z) - testing("There are people on it.") - return 0 + global.using_map.sealed_levels |= global.using_map.overmap_z + + testing("Overmap build complete.") return 1 diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm new file mode 100644 index 0000000000..22de00d612 --- /dev/null +++ b/code/modules/overmap/spacetravel.dm @@ -0,0 +1,114 @@ +//list used to cache empty zlevels to avoid nedless map bloat +var/list/cached_space = list() + +//Space stragglers go here + +/obj/effect/overmap/visitable/sector/temporary + name = "Deep Space" + invisibility = 101 + known = 0 + +/obj/effect/overmap/visitable/sector/temporary/New(var/nx, var/ny, var/nz) + loc = locate(nx, ny, global.using_map.overmap_z) + x = nx + y = ny + map_z += nz + map_sectors["[nz]"] = src + testing("Temporary sector at [x],[y] was created, corresponding zlevel is [nz].") + +/obj/effect/overmap/visitable/sector/temporary/Destroy() + map_sectors["[map_z]"] = null + testing("Temporary sector at [x],[y] was deleted.") + +/obj/effect/overmap/visitable/sector/temporary/proc/can_die(var/mob/observer) + testing("Checking if sector at [map_z[1]] can die.") + for(var/mob/M in global.player_list) + if(M != observer && (M.z in map_z)) + testing("There are people on it.") + return 0 + return 1 + +proc/get_deepspace(x,y) + var/obj/effect/overmap/visitable/sector/temporary/res = locate(x,y,global.using_map.overmap_z) + if(istype(res)) + return res + else if(cached_space.len) + res = cached_space[cached_space.len] + cached_space -= res + res.x = x + res.y = y + return res + else + return new /obj/effect/overmap/visitable/sector/temporary(x, y, global.using_map.get_empty_zlevel()) + +/atom/movable/proc/lost_in_space() + for(var/atom/movable/AM in contents) + if(!AM.lost_in_space()) + return FALSE + return TRUE + +/mob/lost_in_space() + return isnull(client) + +/mob/living/carbon/human/lost_in_space() + return isnull(client) && !key && stat == DEAD + +proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A) + if (!T || !A) + return + + var/obj/effect/overmap/visitable/M = map_sectors["[T.z]"] + if (!M) + return + + if(A.lost_in_space()) + if(!QDELETED(A)) + qdel(A) + return + + var/nx = 1 + var/ny = 1 + var/nz = 1 + + if(T.x <= TRANSITIONEDGE) + nx = world.maxx - TRANSITIONEDGE - 2 + ny = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) + + else if (A.x >= (world.maxx - TRANSITIONEDGE - 1)) + nx = TRANSITIONEDGE + 2 + ny = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2) + + else if (T.y <= TRANSITIONEDGE) + ny = world.maxy - TRANSITIONEDGE -2 + nx = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) + + else if (A.y >= (world.maxy - TRANSITIONEDGE - 1)) + ny = TRANSITIONEDGE + 2 + nx = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2) + + testing("[A] spacemoving from [M] ([M.x], [M.y]).") + + var/turf/map = locate(M.x,M.y,global.using_map.overmap_z) + var/obj/effect/overmap/visitable/TM + for(var/obj/effect/overmap/visitable/O in map) + if(O != M && O.in_space && prob(50)) + TM = O + break + if(!TM) + TM = get_deepspace(M.x,M.y) + nz = pick(TM.map_z) + + var/turf/dest = locate(nx,ny,nz) + if(dest) + A.forceMove(dest) + if(ismob(A)) + var/mob/D = A + if(D.pulling) + D.pulling.forceMove(dest) + + if(istype(M, /obj/effect/overmap/visitable/sector/temporary)) + var/obj/effect/overmap/visitable/sector/temporary/source = M + if (source.can_die()) + testing("Caching [M] for future use") + source.forceMove(null) + cached_space += source diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index d8f57baf3b..2710d69788 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -148,8 +148,8 @@ // return a knot cable (O-X) if one is present in the turf // null if there's none /turf/proc/get_cable_node() - if(!istype(src, /turf/simulated/floor)) - return null + //if(!istype(src, /turf/simulated/floor)) //VOREStation Removal - Why? + //return null //VOREStation Removal - Why? for(var/obj/structure/cable/C in src) if(C.d1 == 0) return C diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 8628315601..00fe38541e 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -94,22 +94,22 @@ return 0 /obj/machinery/power/smes/update_icon() - overlays.Cut() + cut_overlays() if(stat & BROKEN) return - overlays += image('icons/obj/power.dmi', "smes-op[outputting]") + add_overlay("smes-op[outputting]") if(inputting == 2) - overlays += image('icons/obj/power.dmi', "smes-oc2") + add_overlay("smes-oc2") else if (inputting == 1) - overlays += image('icons/obj/power.dmi', "smes-oc1") + add_overlay("smes-oc1") else if(input_attempt) - overlays += image('icons/obj/power.dmi', "smes-oc0") + add_overlay("smes-oc0") var/clevel = chargedisplay() if(clevel>0) - overlays += image('icons/obj/power.dmi', "smes-og[clevel]") + add_overlay("smes-og[clevel]") return diff --git a/code/modules/power/smes_vr.dm b/code/modules/power/smes_vr.dm new file mode 100644 index 0000000000..a333660a43 --- /dev/null +++ b/code/modules/power/smes_vr.dm @@ -0,0 +1,34 @@ +/obj/machinery/power/smes/buildable/hybrid + name = "hybrid power storage unit" + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit, modified with alien technology to generate small amounts of power from seemingly nowhere." + icon = 'icons/obj/power_vr.dmi' + var/recharge_rate = 10000 + var/overlay_icon = 'icons/obj/power_vr.dmi' + +/obj/machinery/power/smes/buildable/hybrid/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if(W.is_screwdriver() || W.is_wirecutter()) + to_chat(user,"\The [src] full of weird alien technology that's best not messed with.") + return 0 + +/obj/machinery/power/smes/buildable/hybrid/update_icon() + cut_overlays() + if(stat & BROKEN) return + + add_overlay("smes-op[outputting]") + + if(inputting == 2) + add_overlay("smes-oc2") + else if (inputting == 1) + add_overlay("smes-oc1") + else + if(input_attempt) + add_overlay("smes-oc0") + + var/clevel = chargedisplay() + if(clevel>0) + add_overlay("smes-og[clevel]") + return + +/obj/machinery/power/smes/buildable/hybrid/process() + charge += min(recharge_rate, capacity - charge) + ..() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index b3b70aa7af..3b96846ecf 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -104,7 +104,7 @@ var/projectile_type = /obj/item/projectile var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate() //Effects - var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 maybe later for burst of fire around the impact point. - Mech + var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 for intense fire. - Mech var/flammability = 0 //Amount of fire stacks to add for the above. var/combustion = TRUE //Does this set off flammable objects on fire/hit? var/stun = 0 @@ -219,12 +219,8 @@ Range() /obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. - //VOREStation Edit begin: SHADEKIN - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - //VOREStation Edit end: SHADEKIN + if(AM.is_incorporeal()) + return ..() if(isliving(AM) && !(pass_flags & PASSMOB)) var/mob/living/L = AM diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 8220e90eee..d25b0e5fee 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -245,7 +245,7 @@ icon_state = "bullet_alt" damage = 15 damage_type = BURN - incendiary = 1 + incendiary = 0.5 flammability = 2 /obj/item/projectile/bullet/incendiary/flamethrower @@ -261,7 +261,9 @@ vacuum_traversal = 0 /obj/item/projectile/bullet/incendiary/flamethrower/large - damage = 15 + damage = 5 + incendiary = 3 + flammability = 2 range = 6 /* Practice rounds and blanks */ diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index 0fdd3df5be..480f085c90 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -680,6 +680,46 @@ materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000) build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar +/datum/design/item/mecha/powercutters + name = "hydraulic cable cutter" + desc = "A large, hydraulic cablecutter." + id = "mech_wirecutter" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter + +/datum/design/item/mecha/powerscrewdriver + name = "hydraulic screwdriver" + desc = "A large, hydraulic screwdriver." + id = "mech_screwdriver" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver + +/datum/design/item/mecha/powerwelder + name = "welding laser" + desc = "A large welding laser." + id = "mech_welder" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, MAT_PHORON = 3000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/welding + +/datum/design/item/mecha/inflatables + name = "inflatables deployer" + desc = "A large pneumatic inflatable deployer." + id = "mech_inflatables" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 2000, MAT_PLASTIC = 4000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables + +/datum/design/item/mecha/hardpoint_clamp + name = "hardpoint actuator" + desc = "A complex device used to commandeer equipment from the ground." + id = "mech_hardpoint_clamp" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_POWER = 5, TECH_COMBAT = 2, TECH_MAGNET = 4) + materials = list(MAT_PLASTEEL = 2500, MAT_PLASTIC = 3000, MAT_OSMIUM = 1500, MAT_SILVER = 2000) + build_path = /obj/item/mecha_parts/mecha_equipment/hardpoint_actuator + /datum/design/item/mecha/generator_nuclear name = "Nuclear Reactor" desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy." diff --git a/code/modules/rogueminer_vr/zone_console.dm b/code/modules/rogueminer_vr/zone_console.dm index 0b6d6929bf..f70031b197 100644 --- a/code/modules/rogueminer_vr/zone_console.dm +++ b/code/modules/rogueminer_vr/zone_console.dm @@ -22,9 +22,12 @@ /obj/machinery/computer/roguezones/Initialize() . = ..() + shuttle_control = locate(/obj/machinery/computer/shuttle_control/belter) + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/computer/roguezones/LateInitialize() if(!rm_controller) rm_controller = new /datum/controller/rogue() - shuttle_control = locate(/obj/machinery/computer/shuttle_control/belter) /obj/machinery/computer/roguezones/attack_ai(mob/user as mob) return attack_hand(user) @@ -116,8 +119,9 @@ var/datum/rogue/zonemaster/ZM_target = rm_controller.prepare_new_zone() //Update shuttle destination. - var/datum/shuttle/ferry/S = shuttle_controller.shuttles["Belter"] - S.area_offsite = ZM_target.myshuttle + var/datum/shuttle/autodock/ferry/S = SSshuttles.shuttles["Belter"] + S.landmark_offsite = ZM_target.myshuttle_landmark + S.next_location = S.get_location_waypoint(!S.location) //Re-enable shuttle. shuttle_control.shuttle_tag = "Belter" @@ -145,7 +149,7 @@ if(rm_controller.current_zone && rm_controller.current_zone.is_occupied()) return // Not usable if shuttle is in occupied zone // Okay do it - var/datum/shuttle/ferry/S = shuttle_controller.shuttles["Belter"] + var/datum/shuttle/autodock/ferry/S = SSshuttles.shuttles["Belter"] S.launch(usr) /obj/item/weapon/circuitboard/roguezones diff --git a/code/modules/rogueminer_vr/zonemaster.dm b/code/modules/rogueminer_vr/zonemaster.dm index d08fb545bd..2c0839fc95 100644 --- a/code/modules/rogueminer_vr/zonemaster.dm +++ b/code/modules/rogueminer_vr/zonemaster.dm @@ -6,7 +6,8 @@ /datum/rogue/zonemaster //our area var/area/asteroid/rogue/myarea - var/area/shuttle/belter/myshuttle + // var/area/shuttle/belter/myshuttle + var/obj/effect/shuttle_landmark/myshuttle_landmark //world.time var/prepared_at = 0 @@ -32,7 +33,9 @@ /datum/rogue/zonemaster/New(var/area/A) ASSERT(A) myarea = A - myshuttle = locate(myarea.shuttle_area) + myshuttle_landmark = locate(/obj/effect/shuttle_landmark) in myarea + if(!istype(myshuttle_landmark)) + warning("Zonemaster cannot find a shuttle landmark in its area '[A]'") spawn(10) //This is called from controller New() and freaks out if this calls back too fast. rm_controller.mark_clean(src) @@ -46,7 +49,7 @@ if(H.stat >= DEAD) //Conditions for exclusion here, like if disconnected people start blocking it. continue var/area/A = get_area(H) - if((A == myarea) || (A == myshuttle)) //The loc of a turf is the area it is in. + if(A == myarea) //The loc of a turf is the area it is in. humans++ return humans @@ -380,6 +383,7 @@ var/ignored = list( /obj/asteroid_spawner, /obj/rogue_mobspawner, + /obj/effect/shuttle_landmark, /obj/effect/step_trigger/teleporter/roguemine_loop/north, /obj/effect/step_trigger/teleporter/roguemine_loop/south, /obj/effect/step_trigger/teleporter/roguemine_loop/east, @@ -389,6 +393,8 @@ if(I.type == /turf/space) I.overlays.Cut() continue + else if(!I.simulated) + continue else if(I.type in ignored) continue qdel(I) @@ -399,6 +405,8 @@ if(I.type == /turf/space) I.overlays.Cut() continue + else if(!I.simulated) + continue else if(I.type in ignored) continue qdel(I) diff --git a/code/modules/shuttles/_defines.dm b/code/modules/shuttles/_defines.dm index ad8c39466b..22d57fe9cb 100644 --- a/code/modules/shuttles/_defines.dm +++ b/code/modules/shuttles/_defines.dm @@ -1,4 +1,22 @@ -#define SHUTTLE_FLAGS_NONE 0 -#define SHUTTLE_FLAGS_PROCESS 1 -#define SHUTTLE_FLAGS_SUPPLY 2 -#define SHUTTLE_FLAGS_ALL (~SHUTTLE_FLAGS_NONE) \ No newline at end of file +// Shuttle flags +#define SHUTTLE_FLAGS_NONE 0 +#define SHUTTLE_FLAGS_PROCESS 1 // Should be processed by shuttle subsystem +#define SHUTTLE_FLAGS_SUPPLY 2 // This is the supply shuttle. Why is this a tag? +#define SHUTTLE_FLAGS_ZERO_G 4 // Shuttle has no internal gravity generation +#define SHUTTLE_FLAGS_ALL (~SHUTTLE_FLAGS_NONE) + +// shuttle_landmark flags +#define SLANDMARK_FLAG_AUTOSET 1 // If set, will set base area and turf type to same as where it was spawned at +#define SLANDMARK_FLAG_ZERO_G 2 // Zero-G shuttles moved here will lose gravity unless the area has ambient gravity. + +// Ferry shuttle location constants +#define FERRY_LOCATION_STATION 0 +#define FERRY_LOCATION_OFFSITE 1 +#define FERRY_GOING_TO_STATION 0 +#define FERRY_GOING_TO_OFFSITE 1 + +#ifndef DEBUG_SHUTTLES + #define log_shuttle(M) +#else + #define log_shuttle(M) log_debug("[M]") +#endif diff --git a/code/modules/shuttles/crashes.dm b/code/modules/shuttles/crashes.dm index eaf7e06019..6f6c66e177 100644 --- a/code/modules/shuttles/crashes.dm +++ b/code/modules/shuttles/crashes.dm @@ -3,30 +3,34 @@ // /datum/shuttle - var/list/crash_areas = null + var/list/crash_locations = null var/crash_message = "Oops. The shuttle blew up." // Announcement made when shuttle crashes /datum/shuttle/New() - if(crash_areas) - for(var/i in 1 to crash_areas.len) - crash_areas[i] = locate(crash_areas[i]) + if(crash_locations) + var/crash_location_ids = crash_locations + crash_locations = list() + for(var/location_tag in crash_location_ids) + var/obj/effect/shuttle_landmark/L = SSshuttles.get_landmark(location_tag) + if(L) + crash_locations += L ..() // Return 0 to let the jump continue, 1 to abort the jump. // Default implementation checks if the shuttle should crash and if so crashes it. -/datum/shuttle/proc/process_longjump(var/area/origin, var/area/intended_destination, var/direction) - if(should_crash()) - do_crash(origin) +/datum/shuttle/proc/process_longjump(var/obj/effect/shuttle_landmark/intended_destination) + if(should_crash(intended_destination)) + do_crash(intended_destination) return 1 // Decide if this is the time we crash. Return true for yes -/datum/shuttle/proc/should_crash(var/area/origin, var/area/intended_destination, var/direction) +/datum/shuttle/proc/should_crash(var/obj/effect/shuttle_landmark/intended_destination) return FALSE // Actually crash the shuttle -/datum/shuttle/proc/do_crash(var/area/source) +/datum/shuttle/proc/do_crash(var/obj/effect/shuttle_landmark/intended_destination) // Choose the target - var/area/target = pick(crash_areas) + var/obj/effect/shuttle_landmark/target = pick(crash_locations) ASSERT(istype(target)) // Blow up the target area? @@ -34,16 +38,18 @@ //What people are we dealing with here var/list/victims = list() - for(var/mob/living/L in source) - victims += L - spawn(0) - shake_camera(L,2 SECONDS,4) + for(var/area/A in shuttle_area) + for(var/mob/living/L in A) + victims += L + spawn(0) + shake_camera(L,2 SECONDS,4) //SHAKA SHAKA SHAKA sleep(2 SECONDS) // Move the shuttle - move(source, target) + if (!attempt_move(target)) + return // Lucky! // Hide people for(var/living in victims) @@ -54,9 +60,11 @@ L.loc = null // Blow up the shuttle - var/list/area_turfs = get_area_turfs(target) - var/turf/epicenter = pick(area_turfs) - var/boomsize = area_turfs.len / 10 // Bigger shuttle = bigger boom + var/list/shuttle_turfs = list() + for(var/area/A in shuttle_area) + shuttle_turfs += get_area_turfs(A) + var/turf/epicenter = pick(shuttle_turfs) + var/boomsize = shuttle_turfs.len / 10 // Bigger shuttle = bigger boom explosion(epicenter, 0, boomsize, boomsize*2, boomsize*3) moving_status = SHUTTLE_CRASHED command_announcement.Announce("[crash_message]", "Shuttle Alert") diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index 060dbff1ad..245b96e82e 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -1,50 +1,55 @@ -/datum/shuttle/ferry/escape_pod - var/datum/computer/file/embedded_program/docking/simple/escape_pod/arming_controller - category = /datum/shuttle/ferry/escape_pod +/datum/shuttle/autodock/ferry/escape_pod + var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/arming_controller + category = /datum/shuttle/autodock/ferry/escape_pod -/datum/shuttle/ferry/escape_pod/New() +/datum/shuttle/autodock/ferry/escape_pod/New() move_time = move_time + rand(-30, 60) if(name in emergency_shuttle.escape_pods) CRASH("An escape pod with the name '[name]' has already been defined.") emergency_shuttle.escape_pods[name] = src + ..() -/datum/shuttle/ferry/escape_pod/init_docking_controllers() - ..() - arming_controller = locate(dock_target_station) + //find the arming controller (berth) - If not configured directly, try to read it from current location landmark + var/arming_controller_tag = arming_controller + if(!arming_controller && active_docking_controller) + arming_controller_tag = active_docking_controller.id_tag + arming_controller = SSshuttles.docking_registry[arming_controller_tag] if(!istype(arming_controller)) - warning("warning: escape pod with station dock tag [dock_target_station] could not find it's dock target!") + CRASH("Could not find arming controller for escape pod \"[name]\", tag was '[arming_controller_tag]'.") - if(docking_controller) - var/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/controller_master = docking_controller.master - if(!istype(controller_master)) - warning("warning: escape pod with docking tag [docking_controller_tag] could not find it's controller master!") - else - controller_master.pod = src + //find the pod's own controller + var/datum/computer/file/embedded_program/docking/simple/prog = SSshuttles.docking_registry[docking_controller_tag] + var/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/controller_master = prog.master + if(!istype(controller_master)) + CRASH("Escape pod \"[name]\" could not find it's controller master! docking_controller_tag=[docking_controller_tag]") + controller_master.pod = src -/datum/shuttle/ferry/escape_pod/can_launch() +/datum/shuttle/autodock/ferry/escape_pod/can_launch() if(arming_controller && !arming_controller.armed) //must be armed return 0 if(location) return 0 //it's a one-way trip. return ..() -/datum/shuttle/ferry/escape_pod/can_force() +/datum/shuttle/autodock/ferry/escape_pod/can_force() if (arming_controller.eject_time && world.time < arming_controller.eject_time + 50) return 0 //dont allow force launching until 5 seconds after the arming controller has reached it's countdown return ..() -/datum/shuttle/ferry/escape_pod/can_cancel() +/datum/shuttle/autodock/ferry/escape_pod/can_cancel() return 0 //This controller goes on the escape pod itself /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod name = "escape pod controller" - var/datum/shuttle/ferry/escape_pod/pod + program = /datum/computer/file/embedded_program/docking/simple + var/datum/shuttle/autodock/ferry/escape_pod/pod /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] + var/datum/computer/file/embedded_program/docking/simple/docking_program = program // Cast to proper type data = list( "docking_status" = docking_program.get_docking_status(), @@ -64,17 +69,18 @@ ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/Topic(href, href_list) - if(..()) - return 1 + if((. = ..())) + return if("manual_arm") pod.arming_controller.arm() + return TOPIC_REFRESH if("force_launch") if (pod.can_force()) pod.force_launch(src) else if (emergency_shuttle.departed && pod.can_launch()) //allow players to manually launch ahead of time if the shuttle leaves pod.launch(src) - + return TOPIC_REFRESH return 0 @@ -82,18 +88,15 @@ //This controller is for the escape pod berth (station side) /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth name = "escape pod berth controller" - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/Initialize() - . = ..() - docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src) - program = docking_program + program = /datum/computer/file/embedded_program/docking/simple/escape_pod_berth /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] + var/datum/computer/file/embedded_program/docking/simple/docking_program = program // Cast to proper type var/armed = null - if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod)) - var/datum/computer/file/embedded_program/docking/simple/escape_pod/P = docking_program + if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth)) + var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/P = docking_program armed = P.armed data = list( @@ -114,44 +117,44 @@ if (!emagged) to_chat(user, "You emag the [src], arming the escape pod!") emagged = 1 - if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod)) - var/datum/computer/file/embedded_program/docking/simple/escape_pod/P = docking_program + if (istype(program, /datum/computer/file/embedded_program/docking/simple/escape_pod_berth)) + var/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/P = program if (!P.armed) P.arm() return 1 //A docking controller program for a simple door based docking port -/datum/computer/file/embedded_program/docking/simple/escape_pod +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth var/armed = 0 var/eject_delay = 10 //give latecomers some time to get out of the way if they don't make it onto the pod var/eject_time = null var/closing = 0 -/datum/computer/file/embedded_program/docking/simple/escape_pod/proc/arm() +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/proc/arm() if(!armed) armed = 1 open_door() -/datum/computer/file/embedded_program/docking/simple/escape_pod/receive_user_command(command) +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/receive_user_command(command) if (!armed) - return - ..(command) + return TRUE // Eat all commands. + return ..(command) -/datum/computer/file/embedded_program/docking/simple/escape_pod/process() +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/process() ..() if (eject_time && world.time >= eject_time && !closing) close_door() closing = 1 -/datum/computer/file/embedded_program/docking/simple/escape_pod/prepare_for_docking() +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/prepare_for_docking() return -/datum/computer/file/embedded_program/docking/simple/escape_pod/ready_for_docking() +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/ready_for_docking() return 1 -/datum/computer/file/embedded_program/docking/simple/escape_pod/finish_docking() +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/finish_docking() return //don't do anything - the doors only open when the pod is armed. -/datum/computer/file/embedded_program/docking/simple/escape_pod/prepare_for_undocking() +/datum/computer/file/embedded_program/docking/simple/escape_pod_berth/prepare_for_undocking() eject_time = world.time + eject_delay*10 diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm new file mode 100644 index 0000000000..b02c5813ba --- /dev/null +++ b/code/modules/shuttles/landmarks.dm @@ -0,0 +1,187 @@ +//making this separate from /obj/effect/landmark until that mess can be dealt with +/obj/effect/shuttle_landmark + name = "Nav Point" + icon = 'icons/effects/effects.dmi' + icon_state = "energynet" + anchored = 1 + unacidable = 1 + simulated = 0 + invisibility = 101 + + //ID of the landmark + var/landmark_tag + //ID of the controller on the dock side (intialize to id_tag, becomes reference) + var/datum/computer/file/embedded_program/docking/docking_controller + //Map of shuttle names to ID of controller used for this landmark for shuttles with multiple ones. + var/list/special_dock_targets + + //When the shuttle leaves this landmark, it will leave behind the base area + //also used to determine if the shuttle can arrive here without obstruction + var/area/base_area + //Will also leave this type of turf behind if set. + var/turf/base_turf + //Name of the shuttle, null for generic waypoint + var/shuttle_restricted + // var/flags = 0 - Already defined on /atom ? Is it being used for anything? Can we reuse it safely? + +/obj/effect/shuttle_landmark/Initialize() + . = ..() + if(docking_controller) + . = INITIALIZE_HINT_LATELOAD + + if(flags & SLANDMARK_FLAG_AUTOSET) + base_area = get_area(src) + var/turf/T = get_turf(src) + if(T) + base_turf = T.type + else + base_area = locate(base_area || world.area) + + name = (name + " ([x],[y])") + SSshuttles.register_landmark(landmark_tag, src) + +/obj/effect/shuttle_landmark/LateInitialize() + if(!docking_controller) + return + var/docking_tag = docking_controller + docking_controller = SSshuttles.docking_registry[docking_tag] + if(!istype(docking_controller)) + log_error("Could not find docking controller for shuttle waypoint '[name]', docking tag was '[docking_tag]'.") + if(using_map.use_overmap) + var/obj/effect/overmap/visitable/location = map_sectors["[z]"] + if(location && location.docking_codes) + docking_controller.docking_codes = location.docking_codes + +/obj/effect/shuttle_landmark/forceMove() + var/obj/effect/overmap/visitable/map_origin = map_sectors["[z]"] + . = ..() + var/obj/effect/overmap/visitable/map_destination = map_sectors["[z]"] + if(map_origin != map_destination) + if(map_origin) + map_origin.remove_landmark(src, shuttle_restricted) + if(map_destination) + map_destination.add_landmark(src, shuttle_restricted) + +//Called when the landmark is added to an overmap sector. +/obj/effect/shuttle_landmark/proc/sector_set(var/obj/effect/overmap/visitable/O, shuttle_name) + shuttle_restricted = shuttle_name + +/obj/effect/shuttle_landmark/proc/is_valid(var/datum/shuttle/shuttle) + if(shuttle.current_location == src) + return FALSE + for(var/area/A in shuttle.shuttle_area) + var/list/translation = get_turf_translation(get_turf(shuttle.current_location), get_turf(src), A.contents) + if(check_collision(base_area, list_values(translation))) + return FALSE + var/conn = GetConnectedZlevels(z) + for(var/w in (z - shuttle.multiz) to z) + if(!(w in conn)) + return FALSE + return TRUE + +// This creates a graphical warning to where the shuttle is about to land in approximately five seconds. +/obj/effect/shuttle_landmark/proc/create_warning_effect(var/datum/shuttle/shuttle) + if(shuttle.current_location == src) + return // TOO LATE! + for(var/area/A in shuttle.shuttle_area) + var/list/translation = get_turf_translation(get_turf(shuttle.current_location), get_turf(src), A.contents) + for(var/T in list_values(translation)) + new /obj/effect/temporary_effect/shuttle_landing(T) // It'll delete itself when needed. + return + +// Should return a readable description of why not if it can't depart. +/obj/effect/shuttle_landmark/proc/cannot_depart(datum/shuttle/shuttle) + return FALSE + +/obj/effect/shuttle_landmark/proc/shuttle_departed(datum/shuttle/shuttle) + return + +/obj/effect/shuttle_landmark/proc/shuttle_arrived(datum/shuttle/shuttle) + return + +/proc/check_collision(area/target_area, list/target_turfs) + for(var/target_turf in target_turfs) + var/turf/target = target_turf + if(!target) + return TRUE //collides with edge of map + if(target.loc != target_area) + return TRUE //collides with another area + if(target.density) + return TRUE //dense turf + return FALSE + +// +//Self-naming/numbering ones. +// +/obj/effect/shuttle_landmark/automatic + name = "Navpoint" + landmark_tag = "navpoint" + flags = SLANDMARK_FLAG_AUTOSET + +/obj/effect/shuttle_landmark/automatic/Initialize() + landmark_tag += "-[x]-[y]-[z]-[random_id("landmarks",1,9999)]" + return ..() + +/obj/effect/shuttle_landmark/automatic/sector_set(var/obj/effect/overmap/visitable/O) + ..() + name = ("[O.name] - [initial(name)] ([x],[y])") + +//Subtype that calls explosion on init to clear space for shuttles +/obj/effect/shuttle_landmark/automatic/clearing + var/radius = 10 + +/obj/effect/shuttle_landmark/automatic/clearing/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/effect/shuttle_landmark/automatic/clearing/LateInitialize() + ..() + for(var/turf/T in range(radius, src)) + if(T.density) + T.ChangeTurf(get_base_turf_by_area(T)) + + +// Subtype that also queues a shuttle datum (for shuttles starting on maps loaded at runtime) +/obj/effect/shuttle_landmark/shuttle_initializer + var/datum/shuttle/shuttle_type + +/obj/effect/shuttle_landmark/shuttle_initializer/Initialize() + . = ..() + LAZYADD(SSshuttles.shuttles_to_initialize, shuttle_type) // queue up for init. + +// +// Bluespace flare landmark beacon +// +/obj/item/device/spaceflare + name = "bluespace flare" + desc = "Burst transmitter used to broadcast all needed information for shuttle navigation systems. Has a flare attached for marking the spot where you probably shouldn't be standing." + icon_state = "bluflare" + light_color = "#3728ff" + var/active + +/obj/item/device/spaceflare/attack_self(var/mob/user) + if(!active) + visible_message("[user] pulls the cord, activating the [src].") + activate() + +/obj/item/device/spaceflare/proc/activate() + if(active) + return + var/turf/T = get_turf(src) + var/mob/M = loc + if(istype(M) && !M.unEquip(src, T)) + return + + active = 1 + anchored = 1 + + var/obj/effect/shuttle_landmark/automatic/mark = new(T) + mark.name = ("Beacon signal ([T.x],[T.y])") + T.hotspot_expose(1500, 5) + update_icon() + +/obj/item/device/spaceflare/update_icon() + . = ..() + if(active) + icon_state = "bluflare_on" + set_light(0.3, 0.1, 6, 2, "85d1ff") diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 4f043d0c25..f4837613e1 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -1,6 +1,3 @@ -//These lists are populated in /datum/controller/subsystem/shuttles/proc/setup_shuttle_docks() -//Shuttle subsystem is instantiated in shuttles.dm. - //shuttle moving state defines are in setup.dm /datum/shuttle @@ -8,48 +5,78 @@ var/warmup_time = 0 var/moving_status = SHUTTLE_IDLE - var/docking_controller_tag //tag of the controller used to coordinate docking - var/datum/computer/file/embedded_program/docking/docking_controller //the controller itself. (micro-controller, not game controller) + var/list/shuttle_area // Initial value can be either a single area type or a list of area types + var/obj/effect/shuttle_landmark/current_location //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - var/arrive_time = 0 //the time at which the shuttle arrives when long jumping - var/depart_time = 0 //Similar to above, set when the shuttle leaves when long jumping, to compare against arrive time. - var/flags = SHUTTLE_FLAGS_PROCESS + var/tmp/arrive_time = 0 //the time at which the shuttle arrives when long jumping + var/flags = SHUTTLE_FLAGS_NONE + var/process_state = IDLE_STATE // Used with SHUTTLE_FLAGS_PROCESS, as well as to store current state. var/category = /datum/shuttle + var/multiz = 0 //how many multiz levels, starts at 0 TODO Leshana - Are we porting this? - var/ceiling_type = /turf/unsimulated/floor/shuttle_ceiling + var/ceiling_type // Type path of turf to roof over the shuttle when at multi-z landmarks. Ignored if null. -/datum/shuttle/New() + var/sound_takeoff = 'sound/effects/shuttles/shuttle_takeoff.ogg' + var/sound_landing = 'sound/effects/shuttles/shuttle_landing.ogg' + + var/knockdown = 1 //whether shuttle downs non-buckled people when it moves + + var/defer_initialisation = FALSE //If this this shuttle should be initialised automatically. + //If set to true, you are responsible for initialzing the shuttle manually. + //Useful for shuttles that are initialized by map_template loading, or shuttles that are created in-game or not used. + + var/mothershuttle //tag of mothershuttle + var/motherdock //tag of mothershuttle landmark, defaults to starting location + + var/tmp/depart_time = 0 //Similar to above, set when the shuttle leaves when long jumping. Used for progress bars. + + // Future Thoughts: Baystation put "docking" stuff in a subtype, leaving base type pure and free of docking stuff. Is this best? + +/datum/shuttle/New(_name, var/obj/effect/shuttle_landmark/initial_location) ..() - if(src.name in shuttle_controller.shuttles) + if(_name) + src.name = _name + + var/list/areas = list() + if(!islist(shuttle_area)) + shuttle_area = list(shuttle_area) + for(var/T in shuttle_area) + var/area/A = locate(T) + if(!istype(A)) + CRASH("Shuttle \"[name]\" couldn't locate area [T].") + areas += A + shuttle_area = areas + + if(initial_location) + current_location = initial_location + else + current_location = SSshuttles.get_landmark(current_location) + if(!istype(current_location)) + log_debug("UM whoops, no initial? [src]") + CRASH("Shuttle '[name]' could not find its starting location landmark [current_location].") + + if(src.name in SSshuttles.shuttles) CRASH("A shuttle with the name '[name]' is already defined.") - shuttle_controller.shuttles[src.name] = src + SSshuttles.shuttles[src.name] = src if(flags & SHUTTLE_FLAGS_PROCESS) - shuttle_controller.process_shuttles += src + SSshuttles.process_shuttles += src if(flags & SHUTTLE_FLAGS_SUPPLY) if(supply_controller.shuttle) CRASH("A supply shuttle is already defined.") supply_controller.shuttle = src /datum/shuttle/Destroy() - shuttle_controller.shuttles -= src.name - shuttle_controller.process_shuttles -= src + current_location = null + SSshuttles.shuttles -= src.name + SSshuttles.process_shuttles -= src + SSshuttles.shuttle_logs -= src if(supply_controller.shuttle == src) supply_controller.shuttle = null . = ..() -/datum/shuttle/process() - return - -/datum/shuttle/proc/init_docking_controllers() - if(docking_controller_tag) - docking_controller = locate(docking_controller_tag) - if(!istype(docking_controller)) - to_world("warning: shuttle with docking tag [docking_controller_tag] could not find it's controller!") - // This creates a graphical warning to where the shuttle is about to land, in approximately five seconds. -/datum/shuttle/proc/create_warning_effect(area/landing_area) - for(var/turf/T in landing_area) - new /obj/effect/temporary_effect/shuttle_landing(T) // It'll delete itself when needed. +/datum/shuttle/proc/create_warning_effect(var/obj/effect/shuttle_landmark/destination) + destination.create_warning_effect(src) // Return false to abort a jump, before the 'warmup' phase. /datum/shuttle/proc/pre_warmup_checks() @@ -60,197 +87,274 @@ return TRUE // If you need an event to occur when the shuttle jumps in short or long jump, override this. -/datum/shuttle/proc/on_shuttle_departure(var/area/origin) - origin.shuttle_departed() +// Keep in mind that destination is the intended destination, the shuttle may or may not actually reach it.s +/datum/shuttle/proc/on_shuttle_departure(var/obj/effect/shuttle_landmark/origin, var/obj/effect/shuttle_landmark/destination) return // Similar to above, but when it finishes moving to the target. Short jump generally makes this occur immediately after the above proc. -/datum/shuttle/proc/on_shuttle_arrival(var/area/destination) - destination.shuttle_arrived() +// Keep in mind we might not actually have gotten to destination. Check current_location to be sure where we ended up. +/datum/shuttle/proc/on_shuttle_arrival(var/obj/effect/shuttle_landmark/origin, var/obj/effect/shuttle_landmark/destination) return -/datum/shuttle/proc/short_jump(var/area/origin,var/area/destination) +/datum/shuttle/proc/short_jump(var/obj/effect/shuttle_landmark/destination) if(moving_status != SHUTTLE_IDLE) return if(!pre_warmup_checks()) return + var/obj/effect/shuttle_landmark/start_location = current_location + // TODO - Figure out exactly when to play sounds. Before warmup_time delay? Should there be a sleep for waiting for sounds? or no? moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) - make_sounds(origin, HYPERSPACE_WARMUP) + make_sounds(HYPERSPACE_WARMUP) create_warning_effect(destination) sleep(5 SECONDS) // so the sound finishes. if(!post_warmup_checks()) - moving_status = SHUTTLE_IDLE + cancel_launch(null) + + if(!fuel_check()) //fuel error (probably out of fuel) occured, so cancel the launch + cancel_launch(null) if (moving_status == SHUTTLE_IDLE) - make_sounds(origin, HYPERSPACE_END) + make_sounds(HYPERSPACE_END) return //someone cancelled the launch - on_shuttle_departure(origin) - moving_status = SHUTTLE_INTRANSIT //shouldn't matter but just to be safe - move(origin, destination) + on_shuttle_departure(start_location, destination) + + attempt_move(destination) + moving_status = SHUTTLE_IDLE + on_shuttle_arrival(start_location, destination) - on_shuttle_arrival(destination) + make_sounds(HYPERSPACE_END) - make_sounds(destination, HYPERSPACE_END) - -/datum/shuttle/proc/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction) - //to_world("shuttle/long_jump: departing=[departing], destination=[destination], interim=[interim], travel_time=[travel_time]") +// TODO - Far Future - Would be great if this was driven by process too. +/datum/shuttle/proc/long_jump(var/obj/effect/shuttle_landmark/destination, var/obj/effect/shuttle_landmark/interim, var/travel_time) + //to_world("shuttle/long_jump: current_location=[current_location], destination=[destination], interim=[interim], travel_time=[travel_time]") if(moving_status != SHUTTLE_IDLE) return if(!pre_warmup_checks()) return - //it would be cool to play a sound here + var/obj/effect/shuttle_landmark/start_location = current_location + // TODO - Figure out exactly when to play sounds. Before warmup_time delay? Should there be a sleep for waiting for sounds? or no? moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) - make_sounds(departing, HYPERSPACE_WARMUP) + make_sounds(HYPERSPACE_WARMUP) create_warning_effect(interim) // Really doubt someone is gonna get crushed in the interim area but for completeness's sake we'll make the warning. sleep(5 SECONDS) // so the sound finishes. if(!post_warmup_checks()) - moving_status = SHUTTLE_IDLE + cancel_launch(null) if (moving_status == SHUTTLE_IDLE) - make_sounds(departing, HYPERSPACE_END) + make_sounds(HYPERSPACE_END) return //someone cancelled the launch arrive_time = world.time + travel_time*10 - depart_time = world.time moving_status = SHUTTLE_INTRANSIT + on_shuttle_departure(start_location, destination) - on_shuttle_departure(departing) + if(attempt_move(interim, TRUE)) + interim.shuttle_arrived() - move(departing, interim, direction) - interim.shuttle_arrived() + if(process_longjump(current_location, destination)) //VOREStation Edit - To hook custom shuttle code in + return //VOREStation Edit - It handled it for us (shuttle crash or such) - if(process_longjump(departing, destination)) //VOREStation Edit - To hook custom shuttle code in - return //VOREStation Edit - It handled it for us (shuttle crash or such) + var/last_progress_sound = 0 + var/made_warning = FALSE + while (world.time < arrive_time) + // Make the shuttle make sounds every four seconds, since the sound file is five seconds. + if(last_progress_sound + 4 SECONDS < world.time) + make_sounds(HYPERSPACE_PROGRESS) + last_progress_sound = world.time - var/last_progress_sound = 0 - var/made_warning = FALSE - while (world.time < arrive_time) - // Make the shuttle make sounds every four seconds, since the sound file is five seconds. - if(last_progress_sound + 4 SECONDS < world.time) - make_sounds(interim, HYPERSPACE_PROGRESS) - last_progress_sound = world.time + if(arrive_time - world.time <= 5 SECONDS && !made_warning) + made_warning = TRUE + create_warning_effect(destination) + sleep(5) - if(arrive_time - world.time <= 5 SECONDS && !made_warning) - made_warning = TRUE - create_warning_effect(destination) - sleep(5) + if(!attempt_move(destination)) + attempt_move(start_location) //try to go back to where we started. If that fails, I guess we're stuck in the interim location - interim.shuttle_departed() - move(interim, destination, direction) moving_status = SHUTTLE_IDLE + on_shuttle_arrival(start_location, destination) + make_sounds(HYPERSPACE_END) - on_shuttle_arrival(destination) - make_sounds(destination, HYPERSPACE_END) +////////////////////////////// +// Forward declarations of public procs. They do nothing because this is not auto-dock. +/datum/shuttle/proc/fuel_check() + return 1 //fuel check should always pass in non-overmap shuttles (they have magic engines) + +/datum/shuttle/proc/cancel_launch(var/user) + // If we are past warming up its too late to cancel. + if (moving_status == SHUTTLE_WARMUP) + moving_status = SHUTTLE_IDLE +/* + Docking stuff +*/ /datum/shuttle/proc/dock() - if (!docking_controller) - return - - var/dock_target = current_dock_target() - if (!dock_target) - return - - docking_controller.initiate_docking(dock_target) + return /datum/shuttle/proc/undock() - if (!docking_controller) - return - docking_controller.initiate_undocking() + return -/datum/shuttle/proc/current_dock_target() - return null +/datum/shuttle/proc/force_undock() + return -/datum/shuttle/proc/skip_docking_checks() - if (!docking_controller || !current_dock_target()) - return 1 //shuttles without docking controllers or at locations without docking ports act like old-style shuttles - return 0 +// Check if we are docked (or never dock) and thus have properly arrived. +/datum/shuttle/proc/check_docked() + return TRUE -//just moves the shuttle from A to B, if it can be moved -//A note to anyone overriding move in a subtype. move() must absolutely not, under any circumstances, fail to move the shuttle. +// Check if we are undocked and thus probably ready to depart. +/datum/shuttle/proc/check_undocked() + return TRUE + +/***************** +* Shuttle Moved Handling * (Observer Pattern Implementation: Shuttle Moved) +* Shuttle Pre Move Handling * (Observer Pattern Implementation: Shuttle Pre Move) +*****************/ + +// Move the shuttle to destination if possible. +// Returns TRUE if we actually moved, otherwise FALSE. +/datum/shuttle/proc/attempt_move(var/obj/effect/shuttle_landmark/destination, var/interim = FALSE) + if(current_location == destination) + log_shuttle("Shuttle [src] attempted to move to [destination] but is already there!") + return FALSE + + if(!destination.is_valid(src)) + log_shuttle("Shuttle [src] aborting attempt_move() because destination=[destination] is not valid") + return FALSE + if(current_location.cannot_depart(src)) + log_shuttle("Shuttle [src] aborting attempt_move() because current_location=[current_location] refuses.") + return FALSE + + log_shuttle("[src] moving to [destination]. Areas are [english_list(shuttle_area)]") + var/list/translation = list() + for(var/area/A in shuttle_area) + log_shuttle("Translating [A]") + translation += get_turf_translation(get_turf(current_location), get_turf(destination), A.contents) + var/old_location = current_location + + // Observer pattern pre-move + GLOB.shuttle_pre_move_event.raise_event(src, old_location, destination) + current_location.shuttle_departed(src) + + // Actually do it! (This never fails) + perform_shuttle_move(destination, translation) + + // Observer pattern post-move + destination.shuttle_arrived(src) + GLOB.shuttle_moved_event.raise_event(src, old_location, destination) + + return TRUE + + +//just moves the shuttle from A to B +//A note to anyone overriding move in a subtype. perform_shuttle_move() must absolutely not, under any circumstances, fail to move the shuttle. //If you want to conditionally cancel shuttle launches, that logic must go in short_jump() or long_jump() -/datum/shuttle/proc/move(var/area/origin, var/area/destination, var/direction=null) - +/datum/shuttle/proc/perform_shuttle_move(var/obj/effect/shuttle_landmark/destination, var/list/turf_translation) + log_shuttle("perform_shuttle_move() current=[current_location] destination=[destination]") //to_world("move_shuttle() called for [name] leaving [origin] en route to [destination].") //to_world("area_coming_from: [origin]") //to_world("destination: [destination]") + ASSERT(current_location != destination) - if(origin == destination) - //to_world("cancelling move, shuttle will overlap.") - return + // If shuttle has no internal gravity, update our gravity with destination gravity + if((flags & SHUTTLE_FLAGS_ZERO_G)) + var/new_grav = 1 + if(destination.flags & SLANDMARK_FLAG_ZERO_G) + var/area/new_area = get_area(destination) + new_grav = new_area.has_gravity + for(var/area/our_area in shuttle_area) + if(our_area.has_gravity != new_grav) + our_area.gravitychange(new_grav) - if (docking_controller && !docking_controller.undocked()) - docking_controller.force_undock() + // TODO - Old code used to throw stuff out of the way instead of squashing. Should we? - var/list/dstturfs = list() - var/throwy = world.maxy - - for(var/turf/T in destination) - dstturfs += T - if(T.y < throwy) - throwy = T.y - - for(var/turf/T in dstturfs) - var/turf/D = locate(T.x, throwy - 1, T.z) - for(var/atom/movable/AM as mob|obj in T) - AM.Move(D) - - for(var/mob/living/carbon/bug in destination) - bug.gib() - - for(var/mob/living/simple_mob/pest in destination) - pest.gib() - - origin.move_contents_to(destination, direction=direction) - - for(var/mob/M in destination) - if(M.client) - spawn(0) - if(M.buckled) - to_chat(M, "Sudden acceleration presses you into \the [M.buckled]!") - shake_camera(M, 3, 1) + // Move, gib, or delete everything in our way! + for(var/turf/src_turf in turf_translation) + var/turf/dst_turf = turf_translation[src_turf] + if(src_turf.is_solid_structure()) // in case someone put a hole in the shuttle and you were lucky enough to be under it + for(var/atom/movable/AM in dst_turf) + //if(AM.movable_flags & MOVABLE_FLAG_DEL_SHUTTLE) + // qdel(AM) + // continue + if(!AM.simulated) + continue + if(isliving(AM)) + var/mob/living/bug = AM + bug.gib() else - to_chat(M, "The floor lurches beneath you!") - shake_camera(M, 10, 1) - if(istype(M, /mob/living/carbon)) - if(!M.buckled) - M.Weaken(3) + qdel(AM) //it just gets atomized I guess? TODO throw it into space somewhere, prevents people from using shuttles as an atom-smasher + + var/list/powernets = list() + for(var/area/A in shuttle_area) + // If there was a zlevel above our origin and we own the ceiling, erase our ceiling now we're leaving + if(ceiling_type && HasAbove(current_location.z)) + for(var/turf/TO in A.contents) + var/turf/TA = GetAbove(TO) + if(istype(TA, ceiling_type)) + TA.ChangeTurf(get_base_turf_by_area(TA), 1, 1) + if(knockdown) + for(var/mob/living/M in A) + spawn(0) + if(M.buckled) + to_chat(M, "Sudden acceleration presses you into \the [M.buckled]!") + shake_camera(M, 3, 1) + else + to_chat(M, "The floor lurches beneath you!") + shake_camera(M, 10, 1) + // TODO - tossing? + //M.visible_message("[M.name] is tossed around by the sudden acceleration!") + //M.throw_at_random(FALSE, 4, 1) + if(istype(M, /mob/living/carbon)) + M.Weaken(3) + // We only need to rebuild powernets for our cables. No need to check machines because they are on top of cables. + for(var/obj/structure/cable/C in A) + powernets |= C.powernet + + // Actually do the movement of everything - This replaces origin.move_contents_to(destination) + translate_turfs(turf_translation, current_location.base_area, current_location.base_turf) + current_location = destination + + // If there's a zlevel above our destination, paint in a ceiling on it so we retain our air + if(ceiling_type && HasAbove(current_location.z)) + for(var/area/A in shuttle_area) + for(var/turf/TD in A.contents) + var/turf/TA = GetAbove(TD) + if(istype(TA, get_base_turf_by_area(TA)) || isopenspace(TA)) + if(get_area(TA) in shuttle_area) + continue + TA.ChangeTurf(ceiling_type, TRUE, TRUE, TRUE) // Power-related checks. If shuttle contains power related machinery, update powernets. - var/update_power = 0 - for(var/obj/machinery/power/P in destination) - update_power = 1 - break + // Note: Old way was to rebuild ALL powernets: if(powernets.len) SSmachines.makepowernets() + // New way only rebuilds the powernets we have to + var/list/cables = list() + for(var/datum/powernet/P in powernets) + cables |= P.cables + qdel(P) + SSmachines.setup_powernets_for_cables(cables) - for(var/obj/structure/cable/C in destination) - update_power = 1 - break - - if(update_power) - SSmachines.makepowernets() return //returns 1 if the shuttle has a valid arrive time /datum/shuttle/proc/has_arrive_time() return (moving_status == SHUTTLE_INTRANSIT) -/datum/shuttle/proc/make_sounds(var/area/A, var/sound_type) +/datum/shuttle/proc/make_sounds(var/sound_type) var/sound_to_play = null switch(sound_type) if(HYPERSPACE_WARMUP) @@ -259,9 +363,29 @@ sound_to_play = 'sound/effects/shuttles/hyperspace_progress.ogg' if(HYPERSPACE_END) sound_to_play = 'sound/effects/shuttles/hyperspace_end.ogg' - for(var/obj/machinery/door/E in A) //dumb, I know, but playing it on the engines doesn't do it justice - playsound(E, sound_to_play, 50, FALSE) + for(var/area/A in shuttle_area) + for(var/obj/machinery/door/E in A) //dumb, I know, but playing it on the engines doesn't do it justice + playsound(E, sound_to_play, 50, FALSE) -/datum/shuttle/proc/message_passengers(area/A, var/message) - for(var/mob/M in A) - M.show_message(message, 2) +/datum/shuttle/proc/message_passengers(var/message) + for(var/area/A in shuttle_area) + for(var/mob/M in A) + M.show_message(message, 2) + +/datum/shuttle/proc/find_children() + . = list() + for(var/shuttle_name in SSshuttles.shuttles) + var/datum/shuttle/shuttle = SSshuttles.shuttles[shuttle_name] + if(shuttle.mothershuttle == name) + . += shuttle + +//Returns the areas in shuttle_area that are not actually child shuttles. +/datum/shuttle/proc/find_childfree_areas() + . = shuttle_area.Copy() + for(var/datum/shuttle/child in find_children()) + . -= child.shuttle_area + +/datum/shuttle/proc/get_location_name() + if(moving_status == SHUTTLE_INTRANSIT) + return "In transit" + return current_location.name diff --git a/code/modules/shuttles/shuttle_autodock.dm b/code/modules/shuttles/shuttle_autodock.dm new file mode 100644 index 0000000000..d8ebc9c020 --- /dev/null +++ b/code/modules/shuttles/shuttle_autodock.dm @@ -0,0 +1,220 @@ +#define DOCK_ATTEMPT_TIMEOUT 200 //how long in ticks we wait before assuming the docking controller is broken or blown up. + +// Subtype of shuttle that handles docking with docking controllers +// Consists of code pulled down from the old /datum/shuttle and up from /datum/shuttle/ferry +// Note: Since all known shuttles extend this type, this really could just be built into /datum/shuttle +// Why isn't it you ask? Eh, baystation did it this way and its convenient to keep the files smaller I guess. +/datum/shuttle/autodock + var/in_use = null // Tells the controller whether this shuttle needs processing, also attempts to prevent double-use + var/last_dock_attempt_time = 0 + + var/docking_controller_tag = null // ID of the controller on the shuttle (If multiple, this is the default one) + var/datum/computer/file/embedded_program/docking/shuttle_docking_controller // Controller on the shuttle (the one in use) + var/docking_codes + + var/tmp/obj/effect/shuttle_landmark/next_location //This is only used internally. + var/datum/computer/file/embedded_program/docking/active_docking_controller // Controller we are docked with (or trying to) + + var/obj/effect/shuttle_landmark/landmark_transition //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. + var/move_time = 240 //the time spent in the transition area + + category = /datum/shuttle/autodock + flags = SHUTTLE_FLAGS_PROCESS | SHUTTLE_FLAGS_ZERO_G + +/datum/shuttle/autodock/New(var/_name, var/obj/effect/shuttle_landmark/start_waypoint) + ..(_name, start_waypoint) + + //Initial dock + active_docking_controller = current_location.docking_controller + update_docking_target(current_location) + if(active_docking_controller) + set_docking_codes(active_docking_controller.docking_codes) + else if(global.using_map.use_overmap) + var/obj/effect/overmap/visitable/location = map_sectors["[current_location.z]"] + if(location && location.docking_codes) + set_docking_codes(location.docking_codes) + dock() + + //Optional transition area + if(landmark_transition) + landmark_transition = SSshuttles.get_landmark(landmark_transition) + +/datum/shuttle/autodock/Destroy() + in_use = null + next_location = null + active_docking_controller = null + landmark_transition = null + + return ..() + +/datum/shuttle/autodock/proc/set_docking_codes(var/code) + docking_codes = code + if(shuttle_docking_controller) + shuttle_docking_controller.docking_codes = code + +/datum/shuttle/autodock/perform_shuttle_move() + force_undock() //bye! + ..() + +// Despite the name this actually updates the SHUTTLE docking conroller, not the active. +/datum/shuttle/autodock/proc/update_docking_target(var/obj/effect/shuttle_landmark/location) + var/current_dock_target + if(location && location.special_dock_targets && location.special_dock_targets[name]) + current_dock_target = location.special_dock_targets[name] + else + current_dock_target = docking_controller_tag + shuttle_docking_controller = SSshuttles.docking_registry[current_dock_target] + if(current_dock_target && !shuttle_docking_controller) + to_world("warning: shuttle [src] can't find its controller with tag [current_dock_target]!") +/* + Docking stuff +*/ +/datum/shuttle/autodock/dock() + if(active_docking_controller && shuttle_docking_controller) + shuttle_docking_controller.initiate_docking(active_docking_controller.id_tag) + last_dock_attempt_time = world.time + +/datum/shuttle/autodock/undock() + if(shuttle_docking_controller) + shuttle_docking_controller.initiate_undocking() + +/datum/shuttle/autodock/force_undock() + if(shuttle_docking_controller) + shuttle_docking_controller.force_undock() + +/datum/shuttle/autodock/check_docked() + if(shuttle_docking_controller) + return shuttle_docking_controller.docked() + return TRUE + +/datum/shuttle/autodock/check_undocked() + if(shuttle_docking_controller) + return shuttle_docking_controller.can_launch() + return TRUE + +// You also could just directly reference active_docking_controller +/datum/shuttle/autodock/proc/current_dock_target() + if(active_docking_controller) + return active_docking_controller.id_tag + return null + +// These checks are built into the check_docked() and check_undocked() procs +/datum/shuttle/autodock/proc/skip_docking_checks() + if (!shuttle_docking_controller || !current_dock_target()) + return TRUE //shuttles without docking controllers or at locations without docking ports act like old-style shuttles + return FALSE + + +/* + Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well. + Doing so will ensure that multiple jumps cannot be initiated in parallel. +*/ +/datum/shuttle/autodock/process() + switch(process_state) + if (WAIT_LAUNCH) + if(check_undocked()) + //*** ready to go + process_launch() + + if (FORCE_LAUNCH) + process_launch() + + if (WAIT_ARRIVE) + if (moving_status == SHUTTLE_IDLE) + //*** we made it to the destination, update stuff + process_arrived() + process_state = WAIT_FINISH + + if (WAIT_FINISH) + if (world.time > last_dock_attempt_time + DOCK_ATTEMPT_TIMEOUT || check_docked()) + //*** all done here + process_state = IDLE_STATE + arrived() + +//not to be confused with the arrived() proc +/datum/shuttle/autodock/proc/process_arrived() + active_docking_controller = next_location.docking_controller + update_docking_target(next_location) + dock() + + next_location = null + in_use = null //release lock + +/datum/shuttle/autodock/proc/get_travel_time() + return move_time + +/datum/shuttle/autodock/proc/process_launch() + if(!next_location || !next_location.is_valid(src) || current_location.cannot_depart(src)) + process_state = IDLE_STATE + in_use = null + return + if (get_travel_time() && landmark_transition) + . = long_jump(next_location, landmark_transition, get_travel_time()) + else + . = short_jump(next_location) + process_state = WAIT_ARRIVE + +/* + Guards - (These don't take docking status into account, just the state machine and move safety) +*/ +/datum/shuttle/autodock/proc/can_launch() + return (next_location && next_location.is_valid(src) && !current_location.cannot_depart(src) && moving_status == SHUTTLE_IDLE && !in_use) + +/datum/shuttle/autodock/proc/can_force() + return (next_location && next_location.is_valid(src) && !current_location.cannot_depart(src) && moving_status == SHUTTLE_IDLE && process_state == WAIT_LAUNCH) + +/datum/shuttle/autodock/proc/can_cancel() + return (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH) + +/* + "Public" procs +*/ +// Queue shuttle for undock and launch by shuttle subsystem. +/datum/shuttle/autodock/proc/launch(var/user) + if (!can_launch()) return + + in_use = user //obtain an exclusive lock on the shuttle + + process_state = WAIT_LAUNCH + undock() + +// Queue shuttle for forced undock and launch by shuttle subsystem. +/datum/shuttle/autodock/proc/force_launch(var/user) + if (!can_force()) return + + in_use = user //obtain an exclusive lock on the shuttle + + process_state = FORCE_LAUNCH + +// Cancel queued launch. +/datum/shuttle/autodock/cancel_launch(var/user) + if (!can_cancel()) return + + moving_status = SHUTTLE_IDLE + process_state = WAIT_FINISH + in_use = null + + //whatever we were doing with docking: stop it, then redock + force_undock() + spawn(1 SECOND) + dock() + +//returns 1 if the shuttle is getting ready to move, but is not in transit yet +/datum/shuttle/autodock/proc/is_launching() + return (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH) + +// /datum/shuttle/autodock/get_location_name() defined in shuttle.dm + +/datum/shuttle/autodock/proc/get_destination_name() + if(!next_location) + return "None" + return next_location.name + +//This gets called when the shuttle finishes arriving at it's destination +//This can be used by subtypes to do things when the shuttle arrives. +//Note that this is called when the shuttle leaves the WAIT_FINISHED state, the proc name is a little misleading +/datum/shuttle/autodock/proc/arrived() + return //do nothing for now + +/obj/effect/shuttle_landmark/transit + flags = SLANDMARK_FLAG_ZERO_G diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index be9cec13af..80086b1b47 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -8,23 +8,20 @@ var/shuttle_tag // Used to coordinate data in shuttle controller. var/hacked = 0 // Has been emagged, no access restrictions. + var/ui_template = "shuttle_control_console.tmpl" + /obj/machinery/computer/shuttle_control/attack_hand(user as mob) if(..(user)) return //src.add_fingerprint(user) //shouldn't need fingerprints just for looking at it. if(!allowed(user)) - to_chat(user, "Access Denied.") + to_chat(user, "Access Denied.") return 1 ui_interact(user) -/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] - if (!istype(shuttle)) - return - +/obj/machinery/computer/shuttle_control/proc/get_ui_data(var/datum/shuttle/autodock/shuttle) var/shuttle_state switch(shuttle.moving_status) if(SHUTTLE_IDLE) shuttle_state = "idle" @@ -34,55 +31,100 @@ var/shuttle_status switch (shuttle.process_state) if(IDLE_STATE) + var/cannot_depart = shuttle.current_location.cannot_depart(shuttle) if (shuttle.in_use) shuttle_status = "Busy." - else if (!shuttle.location) - shuttle_status = "Standing-by at station." + else if(cannot_depart) + shuttle_status = cannot_depart else - shuttle_status = "Standing-by at offsite location." + shuttle_status = "Standing-by at \the [shuttle.get_location_name()]." + if(WAIT_LAUNCH, FORCE_LAUNCH) shuttle_status = "Shuttle has received command and will depart shortly." if(WAIT_ARRIVE) - shuttle_status = "Proceeding to destination." + shuttle_status = "Proceeding to \the [shuttle.get_destination_name()]." if(WAIT_FINISH) shuttle_status = "Arriving at destination now." - data = list( + return list( "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, + "has_docking" = shuttle.shuttle_docking_controller ? 1 : 0, + "docking_status" = shuttle.shuttle_docking_controller?.get_docking_status(), + "docking_override" = shuttle.shuttle_docking_controller?.override_enabled, "can_launch" = shuttle.can_launch(), "can_cancel" = shuttle.can_cancel(), "can_force" = shuttle.can_force(), + "docking_codes" = shuttle.docking_codes ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "shuttle_control_console.tmpl", "[shuttle_tag] Shuttle Control", 470, 310) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) +// This is a subset of the actual checks; contains those that give messages to the user. +// This enables us to give nice error messages as well as not even bother proceeding if we can't. +/obj/machinery/computer/shuttle_control/proc/can_move(var/datum/shuttle/autodock/shuttle, var/user) + var/cannot_depart = shuttle.current_location.cannot_depart(shuttle) + if(cannot_depart) + to_chat(user, "[cannot_depart]") + log_shuttle("Shuttle [shuttle] cannot depart [shuttle.current_location] because: [cannot_depart].") + return FALSE + if(!shuttle.next_location.is_valid(shuttle)) + to_chat(user, "Destination zone is invalid or obstructed.") + log_shuttle("Shuttle [shuttle] destination [shuttle.next_location] is invalid.") + return FALSE + return TRUE /obj/machinery/computer/shuttle_control/Topic(href, href_list) - if(..()) - return 1 + if((. = ..())) + return usr.set_machine(src) src.add_fingerprint(usr) - var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] - if (!istype(shuttle)) - return + var/datum/shuttle/autodock/shuttle = SSshuttles.shuttles[shuttle_tag] + if(!shuttle) + to_chat(usr, "Unable to establish link with the shuttle.") + return handle_topic_href(shuttle, href_list, usr) + +/obj/machinery/computer/shuttle_control/proc/handle_topic_href(var/datum/shuttle/autodock/shuttle, var/list/href_list, var/user) + if(!istype(shuttle)) + return TOPIC_NOACTION if(href_list["move"]) - shuttle.launch(src) + if(can_move(shuttle, user)) + shuttle.launch(src) + return TOPIC_REFRESH + return TOPIC_HANDLED + if(href_list["force"]) - shuttle.force_launch(src) - else if(href_list["cancel"]) + if(can_move(shuttle, user)) + shuttle.force_launch(src) + return TOPIC_REFRESH + return TOPIC_HANDLED + + if(href_list["cancel"]) shuttle.cancel_launch(src) + return TOPIC_REFRESH + + if(href_list["set_codes"]) + var/newcode = input("Input new docking codes", "Docking codes", shuttle.docking_codes) as text|null + if (newcode && CanInteract(usr, global.default_state)) + shuttle.set_docking_codes(uppertext(newcode)) + return TOPIC_REFRESH + +// We delegate populating data to another proc to make it easier for overriding types to add their data. +/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/datum/shuttle/autodock/shuttle = SSshuttles.shuttles[shuttle_tag] + if (!istype(shuttle)) + to_chat(user, "Unable to establish link with the shuttle.") + return + + var/list/data = get_ui_data(shuttle) + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, ui_template, "[shuttle_tag] Shuttle Control", 470, 310) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) /obj/machinery/computer/shuttle_control/emag_act(var/remaining_charges, var/mob/user) if (!hacked) diff --git a/code/modules/shuttles/shuttle_console_multi.dm b/code/modules/shuttles/shuttle_console_multi.dm new file mode 100644 index 0000000000..9d6dccad56 --- /dev/null +++ b/code/modules/shuttles/shuttle_console_multi.dm @@ -0,0 +1,34 @@ +/obj/machinery/computer/shuttle_control/multi + ui_template = "shuttle_control_console_multi.tmpl" + +/obj/machinery/computer/shuttle_control/multi/get_ui_data(var/datum/shuttle/autodock/multi/shuttle) + . = ..() + if(istype(shuttle)) + . += list( + "destination_name" = shuttle.next_location ? shuttle.next_location.name : "No destination set.", + "can_pick" = shuttle.moving_status == SHUTTLE_IDLE, + "can_cloak" = shuttle.can_cloak ? 1 : 0, + "cloaked" = shuttle.cloaked ? 1 : 0, + "legit" = shuttle.legit ? 1 : 0, + // "engines_charging" = ((shuttle.last_move + (shuttle.cooldown SECONDS)) > world.time), // Replaced by longer warmup_time + ) + +/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/shuttle, var/list/href_list) + if((. = ..()) != null) + return + + if(href_list["pick"]) + var/dest_key = input("Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations() + if(dest_key && CanInteract(usr, global.default_state)) + shuttle.set_destination(dest_key, usr) + return TOPIC_REFRESH + + if(href_list["toggle_cloaked"]) + if(!shuttle.can_cloak) + return TOPIC_HANDLED + shuttle.cloaked = !shuttle.cloaked + if(shuttle.legit) + to_chat(usr, "Ship ATC inhibitor systems have been [(shuttle.cloaked ? "activated. The station will not" : "deactivated. The station will")] be notified of our arrival.") + else + to_chat(usr, "Ship stealth systems have been [(shuttle.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival.") + return TOPIC_REFRESH diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index 1722374a1d..4310b9e6ce 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -1,21 +1,22 @@ -/datum/shuttle/ferry/emergency - category = /datum/shuttle/ferry/emergency +// Formerly /datum/shuttle/ferry/emergency +/datum/shuttle/autodock/ferry/emergency + category = /datum/shuttle/autodock/ferry/emergency -/datum/shuttle/ferry/emergency/New() +/datum/shuttle/autodock/ferry/emergency/New() + ..() if(emergency_shuttle.shuttle) CRASH("An emergency shuttle has already been defined.") emergency_shuttle.shuttle = src - ..() -/datum/shuttle/ferry/emergency/arrived() +/datum/shuttle/autodock/ferry/emergency/arrived() + . = ..() if (istype(in_use, /obj/machinery/computer/shuttle_control/emergency)) var/obj/machinery/computer/shuttle_control/emergency/C = in_use C.reset_authorization() emergency_shuttle.shuttle_arrived() -/datum/shuttle/ferry/emergency/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction) - //to_world("shuttle/ferry/emergency/long_jump: departing=[departing], destination=[destination], interim=[interim], travel_time=[travel_time]") +/datum/shuttle/autodock/ferry/emergency/long_jump(var/destination, var/interim, var/travel_time) if (!location) travel_time = SHUTTLE_TRANSIT_DURATION_RETURN else @@ -25,28 +26,28 @@ move_time = travel_time emergency_shuttle.launch_time = world.time + ..(destination, interim, travel_time, direction) + +/datum/shuttle/autodock/ferry/emergency/perform_shuttle_move() + if (current_location == landmark_station) //leaving the station + spawn(0) + emergency_shuttle.departed = 1 + var/estimated_time = round(emergency_shuttle.estimate_arrival_time()/60,1) + + if (emergency_shuttle.evac) + priority_announcement.Announce(replacetext(replacetext(using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) + else + priority_announcement.Announce(replacetext(replacetext(using_map.shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) ..() -/datum/shuttle/ferry/emergency/move(var/area/origin,var/area/destination) - ..(origin, destination) - - if (origin == area_station) //leaving the station - emergency_shuttle.departed = 1 - var/estimated_time = round(emergency_shuttle.estimate_arrival_time()/60,1) - - if (emergency_shuttle.evac) - priority_announcement.Announce(replacetext(replacetext(using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) - else - priority_announcement.Announce(replacetext(replacetext(using_map.shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) - -/datum/shuttle/ferry/emergency/can_launch(var/user) +/datum/shuttle/autodock/ferry/emergency/can_launch(var/user) if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) var/obj/machinery/computer/shuttle_control/emergency/C = user if (!C.has_authorization()) return 0 return ..() -/datum/shuttle/ferry/emergency/can_force(var/user) +/datum/shuttle/autodock/ferry/emergency/can_force(var/user) if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) var/obj/machinery/computer/shuttle_control/emergency/C = user @@ -56,14 +57,14 @@ return 0 return ..() -/datum/shuttle/ferry/emergency/can_cancel(var/user) +/datum/shuttle/autodock/ferry/emergency/can_cancel(var/user) if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) var/obj/machinery/computer/shuttle_control/emergency/C = user if (!C.has_authorization()) return 0 return ..() -/datum/shuttle/ferry/emergency/launch(var/user) +/datum/shuttle/autodock/ferry/emergency/launch(var/user) if (!can_launch(user)) return if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console @@ -77,7 +78,7 @@ ..(user) -/datum/shuttle/ferry/emergency/force_launch(var/user) +/datum/shuttle/autodock/ferry/emergency/force_launch(var/user) if (!can_force(user)) return if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console @@ -91,7 +92,7 @@ ..(user) -/datum/shuttle/ferry/emergency/cancel_launch(var/user) +/datum/shuttle/autodock/ferry/emergency/cancel_launch(var/user) if (!can_cancel(user)) return if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console @@ -177,7 +178,7 @@ /obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] - var/datum/shuttle/ferry/emergency/shuttle = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/ferry/emergency/shuttle = SSshuttles.shuttles[shuttle_tag] if (!istype(shuttle)) return @@ -222,9 +223,9 @@ data = list( "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, + "has_docking" = shuttle.active_docking_controller? 1 : 0, + "docking_status" = shuttle.active_docking_controller? shuttle.active_docking_controller.get_docking_status() : null, + "docking_override" = shuttle.active_docking_controller? shuttle.active_docking_controller.override_enabled : null, "can_launch" = shuttle.can_launch(src), "can_cancel" = shuttle.can_cancel(src), "can_force" = shuttle.can_force(src), diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm index d96051cc46..a5876f55dd 100644 --- a/code/modules/shuttles/shuttle_ferry.dm +++ b/code/modules/shuttles/shuttle_ferry.dm @@ -1,177 +1,50 @@ #define DOCK_ATTEMPT_TIMEOUT 200 //how long in ticks we wait before assuming the docking controller is broken or blown up. -/datum/shuttle/ferry - var/location = 0 //0 = at area_station, 1 = at area_offsite - var/direction = 0 //0 = going to station, 1 = going to offsite. - var/process_state = IDLE_STATE - var/always_process = FALSE +/datum/shuttle/autodock/ferry + var/location = FERRY_LOCATION_STATION //0 = at area_station, 1 = at area_offsite + var/direction = FERRY_GOING_TO_STATION //0 = going to station, 1 = going to offsite. - var/in_use = null //tells the controller whether this shuttle needs processing + var/always_process = FALSE // TODO -why should this exist? - var/area_transition - var/move_time = 0 //the time spent in the transition area - var/transit_direction = null //needed for area/move_contents_to() to properly handle shuttle corners - not exactly sure how it works. + var/obj/effect/shuttle_landmark/landmark_station //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. + var/obj/effect/shuttle_landmark/landmark_offsite //This variable is type-abused initially: specify the landmark_tag, not the actual landmark. - var/area/area_station - var/area/area_offsite - //TODO: change location to a string and use a mapping for area and dock targets. - var/dock_target_station - var/dock_target_offsite + category = /datum/shuttle/autodock/ferry - var/last_dock_attempt_time = 0 - category = /datum/shuttle/ferry +/datum/shuttle/autodock/ferry/New(var/_name) + if(landmark_station) + landmark_station = SSshuttles.get_landmark(landmark_station) + if(landmark_offsite) + landmark_offsite = SSshuttles.get_landmark(landmark_offsite) -/datum/shuttle/ferry/New() - area_offsite = locate(area_offsite) - area_station = locate(area_station) - if(area_transition) - area_transition = locate(area_transition) - ..() + ..(_name, get_location_waypoint(location)) -/datum/shuttle/ferry/short_jump(var/area/origin,var/area/destination) - if(isnull(location)) - return + next_location = get_location_waypoint(!location) - if(!destination) - destination = get_location_area(!location) - if(!origin) - origin = get_location_area(location) - direction = !location - ..(origin, destination) - -/datum/shuttle/ferry/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction) - //to_world("shuttle/ferry/long_jump: departing=[departing], destination=[destination], interim=[interim], travel_time=[travel_time]") - if(isnull(location)) - return - - if(!destination) - destination = get_location_area(!location) - if(!departing) - departing = get_location_area(location) - - direction = !location - ..(departing, destination, interim, travel_time, direction) - -/datum/shuttle/ferry/move(var/area/origin,var/area/destination) - ..(origin, destination) - - if (destination == area_station) location = 0 - if (destination == area_offsite) location = 1 - //if this is a long_jump retain the location we were last at until we get to the new one - -/datum/shuttle/ferry/dock() - ..() - last_dock_attempt_time = world.time - -/datum/shuttle/ferry/proc/get_location_area(location_id = null) +//Gets the shuttle landmark associated with the given location (defaults to current location) +/datum/shuttle/autodock/ferry/proc/get_location_waypoint(location_id = null) if (isnull(location_id)) location_id = location - if (!location_id) - return area_station - return area_offsite + if (location_id == FERRY_LOCATION_STATION) + return landmark_station + return landmark_offsite -/* - Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well. - Doing so will ensure that multiple jumps cannot be initiated in parallel. -*/ -/datum/shuttle/ferry/process() - switch(process_state) - if (WAIT_LAUNCH) - if (skip_docking_checks() || docking_controller.can_launch()) +/datum/shuttle/autodock/ferry/short_jump(var/destination) + direction = !location // Heading away from where we currently are + . = ..() - //to_world("shuttle/ferry/process: area_transition=[area_transition], travel_time=[travel_time]") - if (move_time && area_transition) - long_jump(interim=area_transition, travel_time=move_time, direction=transit_direction) - else - short_jump() +/datum/shuttle/autodock/ferry/long_jump(var/destination, var/obj/effect/shuttle_landmark/interim, var/travel_time) + direction = !location // Heading away from where we currently are + . = ..() - process_state = WAIT_ARRIVE - - if (FORCE_LAUNCH) - if (move_time && area_transition) - long_jump(interim=area_transition, travel_time=move_time, direction=transit_direction) - else - short_jump() - - process_state = WAIT_ARRIVE - - if (WAIT_ARRIVE) - if (moving_status == SHUTTLE_IDLE) - dock() - in_use = null //release lock - process_state = WAIT_FINISH - - if (WAIT_FINISH) - if (skip_docking_checks() || docking_controller.docked() || world.time > last_dock_attempt_time + DOCK_ATTEMPT_TIMEOUT) - process_state = IDLE_STATE - arrived() - -/datum/shuttle/ferry/current_dock_target() - var/dock_target - if (!location) //station - dock_target = dock_target_station - else - dock_target = dock_target_offsite - return dock_target - - -/datum/shuttle/ferry/proc/launch(var/user) - if (!can_launch()) return - - in_use = user //obtain an exclusive lock on the shuttle - - process_state = WAIT_LAUNCH - undock() - -/datum/shuttle/ferry/proc/force_launch(var/user) - if (!can_force()) return - - in_use = user //obtain an exclusive lock on the shuttle - - process_state = FORCE_LAUNCH - -/datum/shuttle/ferry/proc/cancel_launch(var/user) - if (!can_cancel()) return - - moving_status = SHUTTLE_IDLE - process_state = WAIT_FINISH - in_use = null - - if (docking_controller && !docking_controller.undocked()) - docking_controller.force_undock() - - spawn(10) - dock() - - return - -/datum/shuttle/ferry/proc/can_launch() - if (moving_status != SHUTTLE_IDLE) - return 0 - - if (in_use) - return 0 - - return 1 - -/datum/shuttle/ferry/proc/can_force() - if (moving_status == SHUTTLE_IDLE && process_state == WAIT_LAUNCH) - return 1 - return 0 - -/datum/shuttle/ferry/proc/can_cancel() - if (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH) - return 1 - return 0 - -//returns 1 if the shuttle is getting ready to move, but is not in transit yet -/datum/shuttle/ferry/proc/is_launching() - return (moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH || process_state == FORCE_LAUNCH) - -//This gets called when the shuttle finishes arriving at it's destination -//This can be used by subtypes to do things when the shuttle arrives. -/datum/shuttle/ferry/proc/arrived() - return //do nothing for now +/datum/shuttle/autodock/ferry/perform_shuttle_move() + ..() + if (current_location == landmark_station) location = FERRY_LOCATION_STATION + if (current_location == landmark_offsite) location = FERRY_LOCATION_OFFSITE +// Once we have arrived where we are going, plot a course back! +/datum/shuttle/autodock/ferry/process_arrived() + ..() + next_location = get_location_waypoint(!location) diff --git a/code/modules/shuttles/shuttle_specops.dm b/code/modules/shuttles/shuttle_specops.dm index b702d7a78f..0dd88a58e8 100644 --- a/code/modules/shuttles/shuttle_specops.dm +++ b/code/modules/shuttles/shuttle_specops.dm @@ -4,39 +4,11 @@ req_access = list(access_cent_specops) /obj/machinery/computer/shuttle_control/specops/attack_ai(user as mob) - to_chat(user, "Access Denied.") + to_chat(user, "Access Denied.") return 1 -//for shuttles that may use a different docking port at each location -/datum/shuttle/ferry/multidock - var/docking_controller_tag_station - var/docking_controller_tag_offsite - var/datum/computer/file/embedded_program/docking/docking_controller_station - var/datum/computer/file/embedded_program/docking/docking_controller_offsite - category = /datum/shuttle/ferry/multidock - -/datum/shuttle/ferry/multidock/init_docking_controllers() - if(docking_controller_tag_station) - docking_controller_station = locate(docking_controller_tag_station) - if(!istype(docking_controller_station)) - warning("warning: shuttle with docking tag [docking_controller_station] could not find it's controller!") - if(docking_controller_tag_offsite) - docking_controller_offsite = locate(docking_controller_tag_offsite) - if(!istype(docking_controller_offsite)) - warning("warning: shuttle with docking tag [docking_controller_offsite] could not find it's controller!") - if (!location) - docking_controller = docking_controller_station - else - docking_controller = docking_controller_offsite - -/datum/shuttle/ferry/multidock/move(var/area/origin,var/area/destination) - ..(origin, destination) - if (!location) - docking_controller = docking_controller_station - else - docking_controller = docking_controller_offsite - -/datum/shuttle/ferry/multidock/specops +// Formerly /datum/shuttle/ferry/multidock/specops +/datum/shuttle/autodock/ferry/specops var/specops_return_delay = 6000 //After moving, the amount of time that must pass before the shuttle may move again var/specops_countdown_time = 600 //Length of the countdown when moving the shuttle @@ -44,19 +16,19 @@ var/reset_time = 0 //the world.time at which the shuttle will be ready to move again. var/launch_prep = 0 var/cancel_countdown = 0 - category = /datum/shuttle/ferry/multidock/specops + category = /datum/shuttle/autodock/ferry/specops -/datum/shuttle/ferry/multidock/specops/New() +/datum/shuttle/autodock/ferry/specops/New() ..() announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky. announcer.config(list("Response Team" = 0)) -/datum/shuttle/ferry/multidock/specops/proc/radio_announce(var/message) +/datum/shuttle/autodock/ferry/specops/proc/radio_announce(var/message) if(announcer) announcer.autosay(message, "A.L.I.C.E.", "Response Team") -/datum/shuttle/ferry/multidock/specops/launch(var/user) +/datum/shuttle/autodock/ferry/specops/launch(var/user) if (!can_launch()) return @@ -64,14 +36,14 @@ var/obj/machinery/computer/C = user if(world.time <= reset_time) - C.visible_message("[using_map.boss_name] will not allow the Special Operations shuttle to launch yet.") + C.visible_message("[global.using_map.boss_name] will not allow the Special Operations shuttle to launch yet.") if (((world.time - reset_time)/10) > 60) - C.visible_message("[-((world.time - reset_time)/10)/60] minutes remain!") + C.visible_message("[-((world.time - reset_time)/10)/60] minutes remain!") else - C.visible_message("[-(world.time - reset_time)/10] seconds remain!") + C.visible_message("[-(world.time - reset_time)/10] seconds remain!") return - C.visible_message("The Special Operations shuttle will depart in [(specops_countdown_time/10)] seconds.") + C.visible_message("The Special Operations shuttle will depart in [(specops_countdown_time/10)] seconds.") if (location) //returning radio_announce("THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN") @@ -81,31 +53,31 @@ sleep_until_launch() if (location) - var/obj/machinery/light/small/readylight/light = locate() in get_location_area() + var/obj/machinery/light/small/readylight/light = locate() in shuttle_area if(light) light.set_state(0) //launch radio_announce("ALERT: INITIATING LAUNCH SEQUENCE") ..(user) -/datum/shuttle/ferry/multidock/specops/move(var/area/origin,var/area/destination) - ..(origin, destination) +/datum/shuttle/autodock/ferry/specops/perform_shuttle_move() + ..() - spawn(20) + spawn(2 SECONDS) if (!location) //just arrived home - for(var/turf/T in get_area_turfs(destination)) + for(var/turf/T in get_area_turfs(shuttle_area)) var/mob/M = locate(/mob) in T to_chat(M, "You have arrived at [using_map.boss_name]. Operation has ended!") else //just left for the station launch_mauraders() - for(var/turf/T in get_area_turfs(destination)) + for(var/turf/T in get_area_turfs(shuttle_area)) var/mob/M = locate(/mob) in T to_chat(M, "You have arrived at [station_name()]. Commence operation!") var/obj/machinery/light/small/readylight/light = locate() in T if(light) light.set_state(1) -/datum/shuttle/ferry/multidock/specops/cancel_launch() +/datum/shuttle/autodock/ferry/specops/cancel_launch() if (!can_cancel()) return @@ -113,27 +85,26 @@ radio_announce("ALERT: LAUNCH SEQUENCE ABORTED") if (istype(in_use, /obj/machinery/computer)) var/obj/machinery/computer/C = in_use - C.visible_message("Launch sequence aborted.") - + C.visible_message("Launch sequence aborted.") ..() -/datum/shuttle/ferry/multidock/specops/can_launch() +/datum/shuttle/autodock/ferry/specops/can_launch() if(launch_prep) return 0 return ..() //should be fine to allow forcing. process_state only becomes WAIT_LAUNCH after the countdown is over. -///datum/shuttle/ferry/multidock/specops/can_force() +///datum/shuttle/autodock/ferry/specops/can_force() // return 0 -/datum/shuttle/ferry/multidock/specops/can_cancel() +/datum/shuttle/autodock/ferry/specops/can_cancel() if(launch_prep) return 1 return ..() -/datum/shuttle/ferry/multidock/specops/proc/sleep_until_launch() +/datum/shuttle/autodock/ferry/specops/proc/sleep_until_launch() var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values. var/launch_time = world.time + specops_countdown_time diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index 7565d7f466..8b4de51588 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -1,82 +1,81 @@ -/datum/shuttle/ferry/supply - var/away_location = 1 //the location to hide at while pretending to be in-transit +// Formerly /datum/shuttle/ferry/supply +/datum/shuttle/autodock/ferry/supply + var/away_location = FERRY_LOCATION_OFFSITE //the location to hide at while pretending to be in-transit var/late_chance = 80 var/max_late_time = 300 - category = /datum/shuttle/ferry/supply + flags = SHUTTLE_FLAGS_PROCESS|SHUTTLE_FLAGS_SUPPLY + category = /datum/shuttle/autodock/ferry/supply -/datum/shuttle/ferry/supply/short_jump(var/area/origin,var/area/destination) +/datum/shuttle/autodock/ferry/supply/short_jump(var/obj/effect/shuttle_landmark/destination) if(moving_status != SHUTTLE_IDLE) return if(isnull(location)) return - if(!destination) - destination = get_location_area(!location) - if(!origin) - origin = get_location_area(location) - //it would be cool to play a sound here moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) - make_sounds(origin, HYPERSPACE_WARMUP) + make_sounds(HYPERSPACE_WARMUP) sleep(5 SECONDS) // so the sound finishes. if (moving_status == SHUTTLE_IDLE) - make_sounds(origin, HYPERSPACE_END) + make_sounds(HYPERSPACE_END) return //someone cancelled the launch if (at_station() && forbidden_atoms_check()) //cancel the launch because of forbidden atoms. announce over supply channel? moving_status = SHUTTLE_IDLE - make_sounds(origin, HYPERSPACE_END) + make_sounds(HYPERSPACE_END) return if (!at_station()) //at centcom supply_controller.buy() //We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period. - var/area/away_area = get_location_area(away_location) + var/obj/effect/shuttle_landmark/away_waypoint = get_location_waypoint(away_location) moving_status = SHUTTLE_INTRANSIT - //If we are at the away_area then we are just pretending to move, otherwise actually do the move - if (origin != away_area) - move(origin, away_area) + //If we are at the away_landmark then we are just pretending to move, otherwise actually do the move + if (next_location == away_waypoint) + attempt_move(away_waypoint) //wait ETA here. arrive_time = world.time + supply_controller.movetime while (world.time <= arrive_time) sleep(5) - if (destination != away_area) + if (next_location != away_waypoint) //late if (prob(late_chance)) sleep(rand(0,max_late_time)) - move(away_area, destination) + attempt_move(destination) moving_status = SHUTTLE_IDLE - make_sounds(destination, HYPERSPACE_END) + make_sounds(HYPERSPACE_END) if (!at_station()) //at centcom supply_controller.sell() // returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms -/datum/shuttle/ferry/supply/proc/forbidden_atoms_check() +/datum/shuttle/autodock/ferry/supply/proc/forbidden_atoms_check() if (!at_station()) return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care - return supply_controller.forbidden_atoms_check(get_location_area()) + for(var/area/A in shuttle_area) + if(supply_controller.forbidden_atoms_check(A)) + return 1 -/datum/shuttle/ferry/supply/proc/at_station() +/datum/shuttle/autodock/ferry/supply/proc/at_station() return (!location) //returns 1 if the shuttle is idle and we can still mess with the cargo shopping list -/datum/shuttle/ferry/supply/proc/idle() +/datum/shuttle/autodock/ferry/supply/proc/idle() return (moving_status == SHUTTLE_IDLE) //returns the ETA in minutes -/datum/shuttle/ferry/supply/proc/eta_minutes() +/datum/shuttle/autodock/ferry/supply/proc/eta_minutes() var/ticksleft = arrive_time - world.time return round(ticksleft/600,1) diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm index 91a29a99d5..562a21f4d4 100644 --- a/code/modules/shuttles/shuttles_multi.dm +++ b/code/modules/shuttles/shuttles_multi.dm @@ -1,13 +1,15 @@ //This is a holder for things like the Skipjack and Nuke shuttle. -/datum/shuttle/multi_shuttle +// Formerly /datum/shuttle/multi_shuttle +/datum/shuttle/autodock/multi + var/list/destination_tags + var/list/destinations_cache = list() + var/last_cache_rebuild_time = 0 + category = /datum/shuttle/autodock/multi - flags = SHUTTLE_FLAGS_NONE var/cloaked = FALSE var/can_cloak = FALSE + var/at_origin = 1 - var/returned_home = 0 -// var/move_time = 240 - var/move_time = 60 var/cooldown = 20 var/last_move = 0 //the time at which we last moved @@ -15,276 +17,46 @@ var/arrival_message var/departure_message - var/area/interim - var/area/last_departed var/start_location var/last_location - var/list/destinations - var/list/destination_dock_controller_tags = list() //optional, in case the shuttle has multiple docking ports like the ERT shuttle (even though that isn't a multi_shuttle) - var/list/destination_dock_controllers = list() - var/list/destination_dock_targets = list() - var/area/origin var/return_warning = 0 - var/legit = 0 //VOREStation Add - Whether or not a shuttle is a legit NT shuttle. - category = /datum/shuttle/multi_shuttle + var/legit = FALSE -/datum/shuttle/multi_shuttle/New() - origin = locate(origin) - interim = locate(interim) - for(var/destination in destinations) - destinations[destination] = locate(destinations[destination]) +/datum/shuttle/autodock/multi/New() ..() + start_location = current_location + last_location = current_location -/datum/shuttle/multi_shuttle/init_docking_controllers() - ..() - for(var/destination in destinations) - var/controller_tag = destination_dock_controller_tags[destination] - if(!controller_tag) - destination_dock_controllers[destination] = docking_controller - else - var/datum/computer/file/embedded_program/docking/C = locate(controller_tag) +/datum/shuttle/autodock/multi/proc/set_destination(var/destination_key, mob/user) + if(moving_status != SHUTTLE_IDLE) + return + next_location = destinations_cache[destination_key] + if(!next_location) + warning("Shuttle [src] set to destination we can't find: [destination_key]") - if(!istype(C)) - warning("warning: shuttle with docking tag [controller_tag] could not find it's controller!") - else - destination_dock_controllers[destination] = C +/datum/shuttle/autodock/multi/proc/get_destinations() + if (last_cache_rebuild_time < SSshuttles.last_landmark_registration_time) + build_destinations_cache() + return destinations_cache - //might as well set this up here. - if(origin) last_departed = origin - last_location = start_location - //VOREStation Add - Set up origin dock controller - if(!(start_location in destination_dock_controller_tags)) - destination_dock_controllers[start_location] = docking_controller - //VOREStation Add End -/datum/shuttle/multi_shuttle/current_dock_target() - return destination_dock_targets[last_location] +/datum/shuttle/autodock/multi/proc/build_destinations_cache() + last_cache_rebuild_time = world.time + destinations_cache.Cut() + for(var/destination_tag in destination_tags) + var/obj/effect/shuttle_landmark/landmark = SSshuttles.get_landmark(destination_tag) + if (istype(landmark)) + destinations_cache["[landmark.name]"] = landmark -/datum/shuttle/multi_shuttle/move(var/area/origin, var/area/destination) +/datum/shuttle/autodock/multi/perform_shuttle_move() ..() last_move = world.time - if (destination == src.origin) - returned_home = 1 - docking_controller = destination_dock_controllers[last_location] - -/datum/shuttle/multi_shuttle/proc/announce_departure() +/datum/shuttle/autodock/multi/proc/announce_departure() if(cloaked || isnull(departure_message)) return + command_announcement.Announce(departure_message, (announcer ? announcer : "[using_map.boss_name]")) - command_announcement.Announce(departure_message,(announcer ? announcer : "[using_map.boss_name]")) - -/datum/shuttle/multi_shuttle/proc/announce_arrival() - +/datum/shuttle/autodock/multi/proc/announce_arrival() if(cloaked || isnull(arrival_message)) return - - command_announcement.Announce(arrival_message,(announcer ? announcer : "[using_map.boss_name]")) - - -/obj/machinery/computer/shuttle_control/multi - icon_keyboard = "syndie_key" - icon_screen = "syndishuttle" - -/obj/machinery/computer/shuttle_control/multi/attack_hand(user as mob) - - if(..(user)) - return - src.add_fingerprint(user) - - var/datum/shuttle/multi_shuttle/MS = shuttle_controller.shuttles[shuttle_tag] - if(!istype(MS)) return - - var/dat - dat = "
[shuttle_tag] Ship Control
" - - - if(MS.moving_status != SHUTTLE_IDLE) - dat += "Location: Moving
" - else - var/area/areacheck = get_area(src) - dat += "Location: [areacheck.name]
" - - if((MS.last_move + MS.cooldown*10) > world.time) - dat += "Engines charging.
" - else - dat += "Engines ready.
" - - //dat += "
[MS.legit ? "Inhibit ATC":"Toggle cloak"]
" //VOREStation Edit - Adds legit shuttles. //SYNC Edit: Below deals with cloak. - if(MS.can_cloak) - dat += "
Toggle cloaking field
" - dat += "Move ship
" - dat += "Return to base
" - - //Docking - dat += "


" - if(MS.skip_docking_checks()) - dat += "Docking Status: Not in use." - else - var/override_en = MS.docking_controller.override_enabled - var/docking_status = MS.docking_controller.get_docking_status() - - dat += "Docking Status: " - switch(docking_status) - if("undocked") - dat += "Undocked" - if("docking") - dat += "Docking" - if("undocking") - dat += "Undocking" - if("docked") - dat += "Docked" - - if(override_en) dat += " (Override Enabled)" - - dat += ". \[Refresh\]

" - - switch(docking_status) - if("undocked") - dat += "Dock" - if("docked") - dat += "Undock" - dat += "
" - - user << browse("[dat]", "window=[shuttle_tag]shuttlecontrol;size=300x600") - -//check if we're undocked, give option to force launch -/obj/machinery/computer/shuttle_control/proc/check_docking(datum/shuttle/multi_shuttle/MS) - if(MS.skip_docking_checks() || MS.docking_controller.can_launch()) - return 1 - - var/choice = alert("The shuttle is currently docked! Please undock before continuing.","Error","Cancel","Force Launch") - if(choice == "Cancel") - return 0 - - choice = alert("Forcing a shuttle launch while docked may result in severe injury, death and/or damage to property. Are you sure you wish to continue?", "Force Launch", "Force Launch", "Cancel") - if(choice == "Cancel") - return 0 - - return 1 - -/obj/machinery/computer/shuttle_control/multi/Topic(href, href_list) - if(..()) - return 1 - - usr.set_machine(src) - src.add_fingerprint(usr) - - var/datum/shuttle/multi_shuttle/MS = shuttle_controller.shuttles[shuttle_tag] - if(!istype(MS)) return - - //to_world("multi_shuttle: last_departed=[MS.last_departed], origin=[MS.origin], interim=[MS.interim], travel_time=[MS.move_time]") - - if(href_list["refresh"]) - updateUsrDialog() - return - - if (MS.moving_status != SHUTTLE_IDLE) - to_chat(usr, "[shuttle_tag] vessel is moving.") - return - - if(href_list["dock_command"]) - MS.dock() - return - - if(href_list["undock_command"]) - MS.undock() - return - - if(href_list["start"]) - if(MS.at_origin) - to_chat(usr, "You are already at the home base.") - return - - if((MS.last_move + MS.cooldown*10) > world.time) - to_chat(usr, "The ship's drive is inoperable while the engines are charging.") - return - - if(!check_docking(MS)) - updateUsrDialog() - return - - if(!MS.return_warning && !MS.legit) //VOREStation Add - Criminals only! - to_chat(usr, "Returning to your home base will end your mission. If you are sure, press the button again.") - //TODO: Actually end the mission. - MS.return_warning = 1 - return - - //VOREStation Add - Only long-jump if that's a thing you do - if(MS.interim) - MS.long_jump(MS.last_departed, MS.origin, MS.interim, MS.move_time) - else - MS.short_jump(MS.last_departed, MS.origin) - //VOREStation Add End - // No point giving a warning if it does literally nothing. -// if(!MS.return_warning) -// to_chat(usr, "Returning to your home base will end your mission. If you are sure, press the button again.") -// //TODO: Actually end the mission. -// MS.return_warning = 1 -// return - - //MS.long_jump(MS.last_departed, MS.origin, MS.interim, MS.move_time) //VOREStation Edit - MS.last_departed = MS.origin - MS.last_location = MS.start_location - MS.at_origin = 1 - - if(href_list["toggle_cloak"]) - if(!MS.can_cloak) - return - MS.cloaked = !MS.cloaked - to_chat(usr, " Ship [MS.legit ? "ATC inhibitor":"stealth"] systems have been [(MS.cloaked ? "activated. The station will not" : "deactivated. The station will")] be [MS.legit ? "notified":"warned"] of our arrival.") //VOREStation Edit - Adds legit shuttles. - //to_chat(usr, "Ship stealth systems have been [(MS.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival.") //VOREStation Edit. - - if(href_list["move_multi"]) - if((MS.last_move + MS.cooldown*10) > world.time) - to_chat(usr, "The ship's drive is inoperable while the engines are charging.") - return - - if(!check_docking(MS)) - updateUsrDialog() - return - - var/choice = input("Select a destination.") as null|anything in MS.destinations - if(!choice) return - - to_chat(usr, "[shuttle_tag] main computer received message.") - - if(MS.at_origin) - MS.announce_arrival() - MS.last_departed = MS.origin - MS.at_origin = 0 - - - //VOREStation Add - Only long-jump if that's a thing you do - if(MS.interim) - MS.long_jump(MS.last_departed, MS.destinations[choice], MS.interim, MS.move_time) - else - MS.short_jump(MS.last_departed, MS.destinations[choice]) - //VOREStation Add End - MS.last_departed = MS.destinations[choice] - MS.last_location = choice - return - - else if(choice == MS.origin) - - MS.announce_departure() - - //VOREStation Add - Only long-jump if that's a thing you do - if(MS.interim) - MS.long_jump(MS.last_departed, MS.destinations[choice], MS.interim, MS.move_time) - else - MS.short_jump(MS.last_departed, MS.destinations[choice]) - return - //VOREStation Add End - - //VOREStation Add - Only long-jump if that's a thing you do - if(MS.interim) - MS.long_jump(MS.last_departed, MS.destinations[choice], MS.interim, MS.move_time) - else - MS.short_jump(MS.last_departed, MS.destinations[choice]) - //VOREStation Add End - - //MS.short_jump(MS.last_departed, MS.destinations[choice]) //VOREStation Removal - MS.last_departed = MS.destinations[choice] - MS.last_location = choice - - updateUsrDialog() + command_announcement.Announce(arrival_message, (announcer ? announcer : "[using_map.boss_name]")) diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm index 2156206d50..65285b581a 100644 --- a/code/modules/shuttles/shuttles_web.dm +++ b/code/modules/shuttles/shuttles_web.dm @@ -1,12 +1,11 @@ //This shuttle traverses a "web" of route_datums to have a wider range of places to go and make flying feel like movement is actually occuring. -/datum/shuttle/web_shuttle - flags = SHUTTLE_FLAGS_NONE +/datum/shuttle/autodock/web_shuttle + flags = SHUTTLE_FLAGS_ZERO_G var/visible_name = null // The pretty name shown to people in announcements, since the regular name var is used internally for other things. var/cloaked = FALSE var/can_cloak = FALSE var/cooldown = 0 var/last_move = 0 //the time at which we last moved - var/area/current_area = null var/datum/shuttle_web_master/web_master = null var/web_master_type = null var/flight_time_modifier = 1.0 @@ -15,11 +14,10 @@ var/autopilot_delay = 60 // How many ticks to not do anything when not following an autopath. Should equal two minutes. var/autopilot_first_delay = null // If your want your shuttle to stay for a different amount of time for the first time, set this. var/can_rename = TRUE // Lets the pilot rename the shuttle. Only available once. - category = /datum/shuttle/web_shuttle + category = /datum/shuttle/autodock/web_shuttle var/list/obj/item/clothing/head/pilot/helmets -/datum/shuttle/web_shuttle/New() - current_area = locate(current_area) +/datum/shuttle/autodock/web_shuttle/New() web_master = new web_master_type(src) build_destinations() if(autopilot) @@ -31,42 +29,45 @@ helmets = list() ..() -/datum/shuttle/web_shuttle/Destroy() - qdel(web_master) +/datum/shuttle/autodock/web_shuttle/Destroy() + QDEL_NULL(web_master) helmets.Cut() return ..() +/datum/shuttle/autodock/web_shuttle/current_dock_target() + // TODO - Probably don't even need to override this right? Debug testing code below will check! + . = web_master?.get_current_destination()?.my_landmark?.docking_controller?.id_tag + if (. != ..()) + warning("Web shuttle [src] had current_dock_target()=[.] but autodock.current_dock_target() = [..()]") -/datum/shuttle/web_shuttle/current_dock_target() - if(web_master) - return web_master.current_dock_target() - -/datum/shuttle/web_shuttle/move(var/area/origin, var/area/destination) +/datum/shuttle/autodock/web_shuttle/perform_shuttle_move() ..() last_move = world.time + active_docking_controller = current_location.docking_controller + update_docking_target(current_location) -/datum/shuttle/web_shuttle/short_jump() +/datum/shuttle/autodock/web_shuttle/short_jump() . = ..() update_helmets() -/datum/shuttle/web_shuttle/long_jump() +/datum/shuttle/autodock/web_shuttle/long_jump() . = ..() update_helmets() -/datum/shuttle/web_shuttle/on_shuttle_departure() +/datum/shuttle/autodock/web_shuttle/on_shuttle_departure() . = ..() web_master.on_shuttle_departure() update_helmets() -/datum/shuttle/web_shuttle/on_shuttle_arrival() +/datum/shuttle/autodock/web_shuttle/on_shuttle_arrival() . = ..() web_master.on_shuttle_arrival() update_helmets() -/datum/shuttle/web_shuttle/proc/build_destinations() +/datum/shuttle/autodock/web_shuttle/proc/build_destinations() return -/datum/shuttle/web_shuttle/process() +/datum/shuttle/autodock/web_shuttle/process() update_helmets() if(moving_status == SHUTTLE_IDLE) @@ -76,8 +77,8 @@ else // Otherwise we are about to start one or just finished one. if(autopilot_delay > 0) // Wait for awhile so people can get on and off. - if(docking_controller && !skip_docking_checks()) // Dock to the destination if possible. - var/docking_status = docking_controller.get_docking_status() + if(active_docking_controller && shuttle_docking_controller) // Dock to the destination if possible. + var/docking_status = shuttle_docking_controller.get_docking_status() if(docking_status == "undocked") dock() autopilot_say("Docking.") @@ -96,8 +97,8 @@ autopilot_delay-- else // Time to go. - if(docking_controller && !skip_docking_checks()) // Undock if possible. - var/docking_status = docking_controller.get_docking_status() + if(active_docking_controller && shuttle_docking_controller) // Undock if possible. + var/docking_status = shuttle_docking_controller.get_docking_status() if(docking_status == "docked") undock() autopilot_say("Undocking.") @@ -109,13 +110,13 @@ autopilot_say("Taking off.") web_master.process_autopath() -/datum/shuttle/web_shuttle/proc/update_helmets() +/datum/shuttle/autodock/web_shuttle/proc/update_helmets() for(var/helm in helmets) - if(!helm) - helmets -= helm - continue var/obj/item/clothing/head/pilot/H = helm - if(!H.shuttle_comp || get_area(H.shuttle_comp) != get_area(H)) + if(QDELETED(H)) + helmets -= H + continue + if(!H.shuttle_comp || !(get_area(H) in shuttle_area)) H.shuttle_comp = null H.audible_message("\The [H] pings as it loses it's connection with the ship.") H.update_hud("discon") @@ -123,24 +124,24 @@ else H.update_hud(moving_status) -/datum/shuttle/web_shuttle/proc/adjust_autopilot(on) +/datum/shuttle/autodock/web_shuttle/proc/adjust_autopilot(on) if(on) if(autopilot) return autopilot = TRUE autopilot_delay = initial(autopilot_delay) - shuttle_controller.process_shuttles += src + shuttle_controller.process_shuttles |= src else if(!autopilot) return autopilot = FALSE shuttle_controller.process_shuttles -= src -/datum/shuttle/web_shuttle/proc/autopilot_say(message) // Makes the autopilot 'talk' to the passengers. +/datum/shuttle/autodock/web_shuttle/proc/autopilot_say(message) // Makes the autopilot 'talk' to the passengers. var/padded_message = "shuttle autopilot states, \"[message]\"" - message_passengers(current_area, padded_message) + message_passengers(padded_message) -/datum/shuttle/web_shuttle/proc/rename_shuttle(mob/user) +/datum/shuttle/autodock/web_shuttle/proc/rename_shuttle(mob/user) if(!can_rename) to_chat(user, "You can't rename this vessel.") return @@ -162,6 +163,8 @@ var/list/my_doors //Should be list("id_tag" = "Pretty Door Name", ...) var/list/my_sensors //Should be list("id_tag" = "Pretty Sensor Name", ...) +// Note - Searching own area for doors/sensors is fine for legacy web shuttles as they are single-area. +// However if this code is copied to future multi-area shuttles, should search in all shuttle areas /obj/machinery/computer/shuttle_control/web/Initialize() . = ..() var/area/my_area = get_area(src) @@ -186,7 +189,7 @@ log_debug("[my_area] shuttle computer couldn't find [lost] sensor!") /obj/machinery/computer/shuttle_control/web/attackby(obj/I, mob/user) - var/datum/shuttle/web_shuttle/shuttle = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/web_shuttle/shuttle = shuttle_controller.shuttles[shuttle_tag] if(shuttle && istype(I,/obj/item/clothing/head/pilot)) var/obj/item/clothing/head/pilot/H = I H.shuttle_comp = src @@ -208,7 +211,7 @@ /* // If nanoUI falls over and you want a non-nanoUI UI, feel free to uncomment this section. - var/datum/shuttle/web_shuttle/WS = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/web_shuttle/WS = shuttle_controller.shuttles[shuttle_tag] if(!istype(WS)) message_admins("ERROR: Shuttle computer ([src]) ([shuttle_tag]) could not find their shuttle in the shuttles list.") return @@ -272,8 +275,9 @@ /obj/machinery/computer/shuttle_control/web/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] var/list/routes[0] - var/datum/shuttle/web_shuttle/shuttle = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/web_shuttle/shuttle = SSshuttles.shuttles[shuttle_tag] if(!istype(shuttle)) + to_chat(user, "Unable to establish link with the shuttle.") return var/list/R = shuttle.web_master.get_available_routes() @@ -333,11 +337,11 @@ "future_location" = future_location, "shuttle_state" = shuttle_state, "routes" = routes, - "has_docking" = shuttle.docking_controller? 1 : 0, + "has_docking" = shuttle.shuttle_docking_controller? 1 : 0, "skip_docking" = shuttle.skip_docking_checks(), "is_moving" = shuttle.moving_status != SHUTTLE_IDLE, - "docking_status" = shuttle.docking_controller? shuttle.docking_controller.get_docking_status() : null, - "docking_override" = shuttle.docking_controller? shuttle.docking_controller.override_enabled : null, + "docking_status" = shuttle.shuttle_docking_controller? shuttle.shuttle_docking_controller.get_docking_status() : null, + "docking_override" = shuttle.shuttle_docking_controller? shuttle.shuttle_docking_controller.override_enabled : null, "is_in_transit" = shuttle.has_arrive_time(), "travel_progress" = between(0, percent_finished, 100), "time_left" = round( (total_time - elapsed_time) / 10), @@ -360,13 +364,13 @@ /obj/machinery/computer/shuttle_control/web/Topic(href, href_list) - if(..()) - return 1 + if((. = ..())) + return usr.set_machine(src) src.add_fingerprint(usr) - var/datum/shuttle/web_shuttle/WS = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/web_shuttle/WS = SSshuttles.shuttles[shuttle_tag] if(!istype(WS)) message_admins("ERROR: Shuttle computer ([src]) ([shuttle_tag]) could not find their shuttle in the shuttles list.") return @@ -436,19 +440,38 @@ message_admins("ERROR: Shuttle computer was asked to travel to a nonexistant destination.") return + WS.next_location = target_destination.my_landmark + if(!can_move(WS, usr)) + return + WS.web_master.future_destination = target_destination to_chat(usr, "[WS.visible_name] flight computer received command.") WS.web_master.reset_autopath() // Deviating from the path will almost certainly confuse the autopilot, so lets just reset its memory. var/travel_time = new_route.travel_time * WS.flight_time_modifier - + // TODO - Leshana - Change this to use proccess stuff of autodock! if(new_route.interim && new_route.travel_time) - WS.long_jump(WS.current_area, target_destination.my_area, new_route.interim, travel_time / 10) + WS.long_jump(target_destination.my_landmark, new_route.interim, travel_time / 10) else - WS.short_jump(WS.current_area, target_destination.my_area) + WS.short_jump(target_destination.my_landmark) ui_interact(usr) +//check if we're undocked, give option to force launch +/obj/machinery/computer/shuttle_control/web/proc/check_docking(datum/shuttle/autodock/MS) + if(MS.skip_docking_checks() || MS.check_undocked()) + return 1 + + var/choice = alert("The shuttle is currently docked! Please undock before continuing.","Error","Cancel","Force Launch") + if(choice == "Cancel") + return 0 + + choice = alert("Forcing a shuttle launch while docked may result in severe injury, death and/or damage to property. Are you sure you wish to continue?", "Force Launch", "Force Launch", "Cancel") + if(choice == "Cancel") + return 0 + + return 1 + // Props, for now. /obj/structure/flight_left name = "flight computer meters" @@ -474,11 +497,18 @@ /obj/shuttle_connector/Initialize() . = ..() - SSshuttles.OnDocksInitialized(CALLBACK(src, .proc/setup_routes)) + GLOB.shuttle_added.register_global(src, .proc/setup_routes) -/obj/shuttle_connector/proc/setup_routes() - if(destinations && shuttle_name) - var/datum/shuttle/web_shuttle/ES = shuttle_controller.shuttles[shuttle_name] +/obj/shuttle_connector/Destroy() + GLOB.shuttle_added.unregister_global(src, .proc/setup_routes) + . = ..() + +// This is called whenever a shuttle is initialized. If its our shuttle, do our thing! +/obj/shuttle_connector/proc/setup_routes(var/new_shuttle) + var/datum/shuttle/autodock/web_shuttle/ES = shuttle_controller.shuttles[shuttle_name] + if(ES != new_shuttle) + return // Its not our shuttle! Ignore! + if(destinations && istype(ES)) var/datum/shuttle_web_master/WM = ES.web_master for(var/new_dest in destinations) @@ -487,7 +517,9 @@ for(var/type_to_link in D.routes_to_make) var/travel_delay = D.routes_to_make[type_to_link] - D.link_destinations(WM.get_destination_by_type(type_to_link), D.preferred_interim_area, travel_delay) + D.link_destinations(WM.get_destination_by_type(type_to_link), D.preferred_interim_tag, travel_delay) + else + warning("[log_info_line()]'s shuttle [global.log_info_line(ES)] initialized but destinations:[destinations]") qdel(src) diff --git a/code/modules/shuttles/upgrade_guide.md b/code/modules/shuttles/upgrade_guide.md new file mode 100644 index 0000000000..01326e5f21 --- /dev/null +++ b/code/modules/shuttles/upgrade_guide.md @@ -0,0 +1,124 @@ +# "Landmark" Shuttles Conversion +This guide helps with updating maps and shuttle datums from the old "area" based system to the "landmark" based system. + +## Summary +The old shuttle datum worked with areas (`/area`). You are probably familiar with every shuttle having a few cookie-cutter shaped areas it travels between. +When the shuttle "moved" it was translated from its current area to the destination area. The areas had to be _exactly_ the same shape so +that each turf in the origin area got translated to the equivalent place at the target.\ +Since _all possible_ destinations had to have a dedicated area (and areas in BYOND can't overlap) this means it is impossible for two shuttles to travel to the same spot, even at different times. + +In the new system shuttle destinations are represented by "landmark" objects (`/obj/effect/shuttle_landmark`). +When a shuttle is "moved" it is translated from its current landmark to the destination landmark, with each turf keeping its same position _relative_ to the landmarks. +In other words, whatever a turf's x/y/z offsets are from the origin landmark, it will be moved to the same x/y/z offset from the destination landmark. + +## Landmark Objects +Shuttle destinations are represented by `/obj/effect/shuttle_landmark` objects on the map. + +* `name` - Pretty name of the nav point, used on overmap and in messages and console UI. +* `landmark_tag` - Globally unique ID, used by everything else to refer to this landmark. +* `docking_controller` - ID of the controller on the dock side (initialize to id_tag, becomes reference). Leave null if not applicable. +* `base_area` - Type path of the `/area` that should be here when a shuttle is *not* present. +* `base_turf` - Type path of the `/turf` that should be here when a shuttle is *not* present. +* `shuttle_restricted` - If not null, only the named shuttle is allowed to use this landmark. (TODO: Overmap functionality) +* `flags` - Bitfield - defaults to zero, can be any combination of: + * `SLANDMARK_FLAG_AUTOSET` (1) - If set, will initialize base_area and base_turf to same as where it was spawned at. + * `SLANDMARK_FLAG_ZERO_G` (2) - If set, Zero-G shuttles moved here will lose gravity unless the area has ambient gravity. +* `special_dock_targets` - Used to configure shuttles with multiple docking controllers on the shuttle. Map of shuttle `name` -> `id_tag` of the docking controller it should use for this landmark. (Think of a shuttle with airlocks on both sides, each with their own controller. This would tell it which side to use.) + + +## Shuttle Types + + +### Ferry Shuttles +These shuttles go back and forth between two locations (normally called "station" and "offsite"). +Examples: Mining shuttle, Arrivals Shuttle, etc. + +Old Type Path: `/datum/shuttle/ferry`\ +New Type Path: `/datum/shuttle/autodock/ferry` + +##### New Vars: + +Name|Type|Required?|Info +---|---|---|--- +shuttle_area |`/area` typepath(s)|Yes| Can be a single path or list of paths. + +##### Replaced vars: + +Old|New|Required?|Info +:---:|:---:|:---:|--- +area_station |landmark_station |Yes|Tag of the landmark for the "station" location. +area_offsite |landmark_offsite |Yes|Tag of the landmark for the "offsite" location. +area_transition |landmark_transition |No|Tag of the landmark for the "transition" location used during long_jump() +dock_target_station |On landmark |No|`id_tag` docking controller *on the dock* has been moved to the `docking_controller` var on the landmark_station landmark obj. +dock_target_offsite |On landmark |No|`id_tag` docking controller *on the dock* has been moved to the `docking_controller` var on the landmark_offsite landmark obj. + + + + +### Multi Shuttles +These shuttles go between a list of configured locations, one of which is its starting location. +Examples: Skipjack, Syndicate Shuttle + +Old Type Path: `/datum/shuttle/multi_shuttle`\ +New Type Path: `/datum/shuttle/autodock/multi` + +##### New Vars: + +Name|Type|Required?|Info +---|---|---|--- +shuttle_area |`/area` typepath(s)|Yes| Can be a single path or list of paths. + +##### Replaced vars: + +Old|New|Required?|Info +:---:|:---:|:---:|--- +origin |current_location |Yes|Tag of the landmark where the shuttle is at startup. +interim |landmark_transition |No|Tag of the landmark for the "transition" location used during long_jump() +start_location |N/A |No|No longer necessary, automatically determined from the value of `origin` +destinations |destination_tags |Yes|List of destinations the shuttle can travel to. Used to be associative list of *name* -> *area typepath*, now is normal list of landmark tag ids. Name is now read from the landmark obj. +destination_dock_targets|On landmarks |No|Used to be associative list of *name* -> *id_tag* for which docking controller *on the dock* to use at each destination. This is now specified by the `docking_controller` var on each landmark obj. + + + +### Web Shuttles +These shuttles travel along a network of locations connected by routes. Instead of being able to travel to any of its destinations, it can only travel to destinations connected by a route to its current location. Added by Polaris as an upgrade to Multi Shuttles. +Note: While cool, it is likely that the upcoming "overmap" shuttles will be even cooler, and may eventually replace some web shuttles. +Examples: Southern Cross' Ninja Shuttle, Tether's Excursion Shuttle + +Old Type Path: `/datum/shuttle/web_shuttle`\ +New Type Path: `/datum/shuttle/autodock/web_shuttle` + +##### New Vars: + +Name|Type|Required?|Info +---|---|---|--- +shuttle_area |`/area` typepath(s)|Yes| Can be a single path or list of paths. + +##### Replaced vars: + +Old|New|Required?|Info +:---:|:---:|:---:|--- +current_area |current_location |Yes|Tag of the landmark where the shuttle is at startup. + +#### Web Destination Configuration (`/datum/shuttle_destination`) +The network of routes for each web shuttle is configured by defining datums. These are mostly unchanged but use landmarks instead of areas now. + +##### Replaced vars: + +Old|New|Required?|Info +:---:|:---:|:---:|--- +my_area |my_landmark |Yes|Tag of the landmark associated with this destination. +preferred_interim_area |preferred_interim_tag |No|Tag of the landmark for the "transition" location used during long_jump() +dock_target |On landmark |No|`id_tag` docking controller *on the dock* has been moved to the `docking_controller` var on the my_landmark landmark obj. + +### Misc Shuttle Types +Other shuttle types that are either unused or unchanged in particular. + +#### Escape Pods +Special case of ferry shuttles that use escape pod berth controllers. +Type path changed from `/datum/shuttle/ferry/escape_pod` to `/datum/shuttle/autodock/ferry/escape_pod` +Follow same instructions as for other ferry shuttles. + +#### Multidock Ferry Shuttles +`/datum/shuttle/ferry/multidock` was a variant of ferry shuttles that could use a different docking port at each location. +Obsolete since is now natively supported by all dockable shuttles. diff --git a/code/modules/shuttles/web_datums.dm b/code/modules/shuttles/web_datums.dm index f64573270c..3e2abf9443 100644 --- a/code/modules/shuttles/web_datums.dm +++ b/code/modules/shuttles/web_datums.dm @@ -8,7 +8,7 @@ /datum/shuttle_route var/datum/shuttle_destination/start = null // One of the two sides of this route. Start just means it was the creator of this route. var/datum/shuttle_destination/end = null // The second side. - var/area/interim = null // Where the shuttle sits during the movement. Make sure no other shuttle shares this or Very Bad Things will happen. + var/var/obj/effect/shuttle_landmark/interim // Where the shuttle sits during the movement. Make sure no other shuttle shares this or Very Bad Things will happen. var/travel_time = 0 // How long it takes to move from start to end, or end to start. Set to 0 for instant travel. var/one_way = FALSE // If true, you can't travel from end to start. @@ -16,7 +16,7 @@ start = _start end = _end if(_interim) - interim = locate(_interim) + interim = SSshuttles.get_landmark(_interim) travel_time = _time one_way = _oneway @@ -50,14 +50,12 @@ // This is the second datum, and contains information on all the potential destinations for a specific shuttle. /datum/shuttle_destination var/name = "a place" // Name of the destination, used for the flight computer. - var/area/my_area = null // Where the shuttle will move to when it actually arrives. + var/obj/effect/shuttle_landmark/my_landmark = null // Where the shuttle will move to when it actually arrives. var/datum/shuttle_web_master/master = null // The datum that does the coordination with the actual shuttle datum. var/list/routes = list() // Routes that are connected to this destination. - var/preferred_interim_area = null // When building a new route, use this interim area. + var/preferred_interim_tag = null // When building a new route, use interim landmark with this tag. var/skip_me = FALSE // We will not autocreate this one. Some map must be doing it. - var/dock_target = null // The tag_id that the shuttle will use to try to dock to the destination, if able. - var/radio_announce = 0 // Whether it will make a station announcement (0) or a radio announcement (1). var/announcer = null // The name of the 'announcer' that will say the arrival/departure messages. Defaults to the map's boss name if blank. // var/arrival_message = null // Message said if the ship enters this destination. Not announced if the ship is cloaked. @@ -72,7 +70,9 @@ var/list/routes_to_make = list() /datum/shuttle_destination/New(var/new_master) - my_area = locate(my_area) + my_landmark = SSshuttles.get_landmark(my_landmark) + if(!my_landmark) + log_debug("Web shuttle destination '[name]' could not find its landmark '[my_landmark]'.") master = new_master /datum/shuttle_destination/Destroy() @@ -99,7 +99,7 @@ // Now link our new destination to us. var/travel_delay = destinations_to_create[type_to_make] - link_destinations(new_dest, preferred_interim_area, travel_delay) + link_destinations(new_dest, preferred_interim_tag, travel_delay) to_world("SHUTTLES: [name] has linked themselves to [new_dest.name]") to_world("SHUTTLES: [name] has finished building destinations. already_made list is \[[english_list(already_made)]\].") @@ -135,14 +135,14 @@ else global_announcer.autosay(get_arrival_message(),(announcer ? announcer : "[using_map.boss_name]")) -/datum/shuttle_destination/proc/link_destinations(var/datum/shuttle_destination/other_place, var/area/interim_area, var/travel_time = 0) +/datum/shuttle_destination/proc/link_destinations(var/datum/shuttle_destination/other_place, var/interim_tag, var/travel_time = 0) // First, check to make sure this doesn't cause a duplicate route. for(var/datum/shuttle_route/R in routes) if(R.start == other_place || R.end == other_place) return // Now we can connect them. - var/datum/shuttle_route/new_route = new(src, other_place, interim_area, travel_time) + var/datum/shuttle_route/new_route = new(src, other_place, interim_tag, travel_time) routes += new_route other_place.routes += new_route @@ -166,7 +166,7 @@ // This is the third and final datum, which coordinates with the shuttle datum to tell it where it is, where it can go, and how long it will take. // It is also responsible for instancing all the destinations it has control over, and linking them together. /datum/shuttle_web_master - var/datum/shuttle/web_shuttle/my_shuttle = null // Ref to the shuttle this datum is coordinating with. + var/datum/shuttle/autodock/web_shuttle/my_shuttle = null // Ref to the shuttle this datum is coordinating with. var/datum/shuttle_destination/current_destination = null // Where the shuttle currently is. Bit of a misnomer. var/datum/shuttle_destination/future_destination = null // Where it will be in the near future. var/datum/shuttle_destination/starting_destination = null // Where the shuttle will start at, generally at the home base. @@ -204,7 +204,7 @@ for(var/datum/shuttle_destination/D in destinations) for(var/type_to_link in D.routes_to_make) var/travel_delay = D.routes_to_make[type_to_link] - D.link_destinations(get_destination_by_type(type_to_link), D.preferred_interim_area, travel_delay) + D.link_destinations(get_destination_by_type(type_to_link), D.preferred_interim_tag, travel_delay) /datum/shuttle_web_master/proc/on_shuttle_departure() current_destination.exit() @@ -214,11 +214,6 @@ future_destination.enter() current_destination = future_destination future_destination = null - my_shuttle.current_area = current_destination.my_area - -/datum/shuttle_web_master/proc/current_dock_target() - if(current_destination) - return current_destination.dock_target /datum/shuttle_web_master/proc/get_available_routes() if(current_destination) @@ -254,10 +249,11 @@ future_destination = R.get_other_side(current_destination) var/travel_time = R.travel_time * my_shuttle.flight_time_modifier * 2 // Autopilot is less efficent than having someone flying manually. + // TODO - Leshana - Change this to use proccess stuff of autodock! if(R.interim && R.travel_time > 0) - my_shuttle.long_jump(my_shuttle.current_area, future_destination.my_area, R.interim, travel_time / 10) + my_shuttle.long_jump(future_destination.my_landmark, R.interim, travel_time / 10) else - my_shuttle.short_jump(my_shuttle.current_area, future_destination.my_area) + my_shuttle.short_jump(future_destination.my_landmark) return TRUE // Note this will return before the shuttle actually arrives. /datum/shuttle_web_master/proc/process_autopath() diff --git a/code/modules/tables/presets_vr.dm b/code/modules/tables/presets_vr.dm index 16658e19a5..085c4c6d8f 100644 --- a/code/modules/tables/presets_vr.dm +++ b/code/modules/tables/presets_vr.dm @@ -16,4 +16,6 @@ /obj/structure/table/darkglass/dismantle(obj/item/weapon/wrench/W, mob/user) to_chat(user, "You cannot dismantle \the [src].") - return \ No newline at end of file + return +/obj/structure/table/alien/blue + icon = 'icons/turf/shuttle_alien_blue.dmi' diff --git a/code/modules/vchat/html/vchat.html b/code/modules/vchat/html/vchat.html index 6426defa57..a3612d78e4 100644 --- a/code/modules/vchat/html/vchat.html +++ b/code/modules/vchat/html/vchat.html @@ -18,8 +18,8 @@
-

VChat is still loading. If you see this for a very long time, try the OOC 'Reload VChat' verb, or reconnecting.

-

Sometimes if you're still caching resources, it will take longer than usual.

+

You probably shouldn't see this page. This generally means chat is very broken.

+

You can wait a few seconds to see if it loads, or try OOC > Reload VChat.

@@ -78,7 +84,6 @@

Global Settings

-

Clicking anywhere in VChat saves your settings.

@@ -116,19 +121,19 @@
- +
- +
- +
diff --git a/code/modules/vchat/js/vchat.js b/code/modules/vchat/js/vchat.js index 905505bcb8..a81616460d 100644 --- a/code/modules/vchat/js/vchat.js +++ b/code/modules/vchat/js/vchat.js @@ -24,8 +24,7 @@ //Options for vchat var vchat_opts = { - pingThisOften: 10000, //ms - pingDropsAllowed: 2, + msBeforeDropped: 30000, //No ping for this long, and the server must be gone cookiePrefix: "vst-", //If you're another server, you can change this if you want. alwaysShow: ["vc_looc", "vc_system"] //Categories to always display on every tab }; @@ -75,11 +74,8 @@ var vchat_state = { byond_ckey: null, //Ping status - lastPingAttempt: 0, - lastPingReply: 0, - missedPings: 0, - latency: 0, - reconnecting: false, + lastPingReceived: 0, + latency_sent: 0, //Last ID lastId: 0 @@ -99,8 +95,7 @@ function start_vchat() { doWinset("chatloadlabel", {"is-visible": false}); //Commence the pingening - send_ping(); - setInterval(send_ping, vchat_opts.pingThisOften); + setInterval(check_ping, vchat_opts.msBeforeDropped); //For fun send_debug("VChat Loaded!"); @@ -125,6 +120,7 @@ function start_vue() { editing: false, //If we're in settings edit mode paused: false, //Autoscrolling latency: 0, //Not necessarily network latency, since the game server has to align the responses into ticks + reconnecting: false, //If we've lost our connection ext_styles: "", //Styles for chat downloaded files is_admin: false, @@ -261,6 +257,13 @@ function start_vue() { } }, watch: { + reconnecting: function(newSetting, oldSetting) { + if(newSetting == true && oldSetting == false) { + this.internal_message("Your client has lost connection to the server, or there is severe lag. Your client will reconnect if possible."); + } else if (newSetting == false && oldSetting == true) { + this.internal_message("Your client has reconnected to the server."); + } + }, //Save the inverted setting to LS inverted: function (newSetting) { set_storage("darkmode",newSetting); @@ -335,11 +338,15 @@ function start_vue() { }, //What color does the latency pip get? ping_classes: function() { - if(this.latency === 0) { return "grey"; } + if(!this.latency) { + return this.reconnecting ? "red" : "green"; //Standard + } + + if (this.latency == "?") { return "grey"; } //Waiting for latency test reply else if(this.latency < 0 ) {return "red"; } else if(this.latency <= 200) { return "green"; } else if(this.latency <= 400) { return "yellow"; } - else { return "red"; } + else { return "grey"; } }, current_categories: function() { if(this.active_tab == this.tabs[0]) { @@ -592,17 +599,46 @@ function start_vue() { hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave); hiddenElement.target = '_blank'; - var filename = "chat_export.html"; + var fileprefix = "log"; + var extension =".html"; + + var now = new Date(); + var hours = String(now.getHours()); + if(hours.length < 2) { + hours = "0" + hours; + } + var minutes = String(now.getMinutes()); + if(minutes.length < 2) { + minutes = "0" + minutes; + } + var dayofmonth = String(now.getDate()); + if(dayofmonth.length < 2) { + dayofmonth = "0" + dayofmonth; + } + var month = String(now.getMonth()+1); //0-11 + if(month.length < 2) { + month = "0" + month; + } + var year = String(now.getFullYear()); + var datesegment = " "+year+"-"+month+"-"+dayofmonth+" ("+hours+" "+minutes+")"; + + var filename = fileprefix+datesegment+extension; //Unlikely to work unfortunately, not supported in any version of IE, only Edge - if (hiddenElement.download !== undefined){ + if (hiddenElement.download !== undefined) { hiddenElement.download = filename; hiddenElement.click(); //Probably what will end up getting used } else { let blob = new Blob([textToSave], {type: 'text/html;charset=utf8;'}); - saved = window.navigator.msSaveBlob(blob, filename); + saved = window.navigator.msSaveOrOpenBlob(blob, filename); } + }, + do_latency_test: function() { + send_latency_check(); + }, + blur_this: function(event) { + event.target.blur(); } } }); @@ -613,21 +649,37 @@ function start_vue() { * Actual Methods * ************/ -//Send a 'ping' to byond and check to see if we got the last one back in a timely manner -function send_ping() { - vchat_state.latency = (Math.min(Math.max(vchat_state.lastPingReply - vchat_state.lastPingAttempt, -1), 999)); - //If their last reply was in the previous ping window or earlier. - if(vchat_state.latency < 0) { - vchat_state.missedPings++; - if((vchat_state.missedPings >= vchat_opts.pingDropsAllowed) && !vchat_state.reconnecting) { - system_message("Your client has lost connection with the server. It will reconnect automatically if possible."); - vchat_state.reconnecting = true; +function check_ping() { + var time_ago = Date.now() - vchat_state.lastPingReceived; + if(time_ago > vchat_opts.msBeforeDropped) + vueapp.reconnecting = true; +} + +//Send a 'ping' to byond +function send_latency_check() { + if(vchat_state.latency_sent) + return; + + vchat_state.latency_sent = Date.now(); + vueapp.latency = "?"; + push_Topic("ping"); + setTimeout(function() { + if(vchat_state.latency_ms == "?") { + vchat_state.latency_ms = 999; } + }, 1000); // 1 second to reply otherwise we mark it as bad + setTimeout(function() { + vchat_state.latency_sent = 0; + vueapp.latency = 0; + }, 5000); //5 seconds to display ping time overall +} + +function get_latency_check() { + if(!vchat_state.latency_sent) { + return; //Too late } - vueapp.latency = vchat_state.latency; - push_Topic("keepalive_client"); - vchat_state.lastPingAttempt = Date.now(); + vueapp.latency = Date.now() - vchat_state.latency_sent; } //We accept double-url-encoded JSON strings because Byond is garbage and UTF-8 encoded url_encode() text has crazy garbage in it. @@ -678,7 +730,7 @@ function send_debug(message) { //A side-channel to send events over that aren't just chat messages, if necessary. function get_event(event) { if(!vchat_state.ready) { - push_Topic('not_ready'); + push_Topic("not_ready"); return; } @@ -704,10 +756,19 @@ function get_event(event) { break; //Just a ping. - case 'keepalive_server': - vchat_state.lastPingReply = Date.now(); - vchat_state.missedPings = 0; - reconnecting = false; + case 'keepalive': + vchat_state.lastPingReceived = Date.now(); + vueapp.reconnecting = false; + break; + + //Response to a latency test. + case 'pong': + get_latency_check(); + break; + + //The server doesn't know if we're loaded or not (we bail above if we're not, so we must be). + case 'availability': + push_Topic("done_loading"); break; default: diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm index ec32c08118..23900f2d3c 100644 --- a/code/modules/vchat/vchat_client.dm +++ b/code/modules/vchat/vchat_client.dm @@ -46,7 +46,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic . = ..() owner = C - update_vis() /datum/chatOutput/Destroy() owner = null @@ -78,14 +77,20 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic become_broken() return FALSE + //Could be loaded from a previous round, are you still there? + if(winget(owner,"outputwindow.htmloutput","is-visible") == "true") //Winget returns strings + send_event(event = list("evttype" = "availability")) + sleep(3 SECONDS) + if(!owner) // In case the client vanishes before winexists returns qdel(src) return FALSE - if(!resources_sent) - send_resources() - - load() + if(!loaded) + update_vis() + if(!resources_sent) + send_resources() + load() return TRUE @@ -115,7 +120,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic owner.chatOutputLoadedAt = world.time //update_vis() //It does it's own winsets - + ping_cycle() send_playerinfo() load_database() @@ -163,9 +168,23 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic /datum/chatOutput/proc/send_event(var/event, var/client/C = owner) C << output(jsEncode(event), "htmloutput:get_event") +//Looping sleeping proc that just pings the client and dies when we die +/datum/chatOutput/proc/ping_cycle() + set waitfor = FALSE + while(!QDELING(src)) + if(!owner) + qdel(src) + return + send_event(event = keep_alive()) + sleep(20 SECONDS) //Make sure this makes sense with what the js client is expecting + //Just produces a message for using in keepalives from the server to the client -/datum/chatOutput/proc/keepalive() - return list("evttype" = "keepalive_server") +/datum/chatOutput/proc/keep_alive() + return list("evttype" = "keepalive") + +//A response to a latency check from the client +/datum/chatOutput/proc/latency_check() + return list("evttype" = "pong") //Redirected from client/Topic when the user clicks a link that pertains directly to the chat (when src == "chat") /datum/chatOutput/Topic(var/href, var/list/href_list) @@ -197,8 +216,8 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic CRASH("Tried to send a message to [owner.ckey] chatOutput before it was ready!") if("done_loading") data = done_loading(arglist(params)) - if("keepalive_client") - data = keepalive(arglist(params)) + if("ping") + data = latency_check(arglist(params)) if("ident") data = bancheck(arglist(params)) if("unloading") diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 8199c91577..24d24b1179 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -25,7 +25,7 @@ /obj/vehicle/train/Initialize() . = ..() for(var/obj/vehicle/train/T in orange(1, src)) - latch(T) + latch(T, null) /obj/vehicle/train/Move() var/old_loc = get_turf(src) @@ -149,22 +149,26 @@ //Note: there is a modified version of this in code\modules\vehicles\cargo_train.dm specifically for cargo train engines /obj/vehicle/train/proc/attach_to(obj/vehicle/train/T, mob/user) if (get_dist(src, T) > 1) - to_chat(user, "[src] is too far away from [T] to hitch them together.") + if(user) + to_chat(user, "[src] is too far away from [T] to hitch them together.") return if (lead) - to_chat(user, "[src] is already hitched to something.") + if(user) + to_chat(user, "[src] is already hitched to something.") return if (T.tow) - to_chat(user, "[T] is already towing something.") + if(user) + to_chat(user, "[T] is already towing something.") return //check for cycles. var/obj/vehicle/train/next_car = T while (next_car) if (next_car == src) - to_chat(user, "That seems very silly.") + if(user) + to_chat(user, "That seems very silly.") return next_car = next_car.lead diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm index e53b286e56..d946f35870 100644 --- a/code/unit_tests/zas_tests.dm +++ b/code/unit_tests/zas_tests.dm @@ -78,12 +78,12 @@ return 1 /datum/unit_test/zas_area_test/supply_centcomm - name = "ZAS: Supply Shuttle (CentCom)" - area_path = /area/supply/dock + name = "ZAS: Supply Shuttle" + area_path = /area/shuttle/supply /datum/unit_test/zas_area_test/emergency_shuttle name = "ZAS: Emergency Shuttle" - area_path = /area/shuttle/escape/centcom + area_path = /area/shuttle/escape /datum/unit_test/zas_area_test/ai_chamber name = "ZAS: AI Chamber" diff --git a/config/example/config.txt b/config/example/config.txt index f9be5fc872..018cd9e364 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -163,6 +163,9 @@ ALLOW_VOTE_RESTART ## allow players to initate a mode-change start ALLOW_VOTE_MODE +## time in pregame lobby in seconds +PREGAME_TIME 180 + ## min delay (deciseconds) between voting sessions (default 10 minutes) VOTE_DELAY 6000 diff --git a/config/jobwhitelist.txt b/config/jobwhitelist.txt index 859e8e2007..6cb52a6391 100644 --- a/config/jobwhitelist.txt +++ b/config/jobwhitelist.txt @@ -8,4 +8,5 @@ tinybear16 - clown chargae - mime verkister - clown H0lySquirr3l - clown -sgtryder - mime \ No newline at end of file +sgtryder - mime +tygertac - clown \ No newline at end of file diff --git a/html/changelogs/mechoid - exoexpansion.yml b/html/changelogs/mechoid - exoexpansion.yml new file mode 100644 index 0000000000..c8a399fe79 --- /dev/null +++ b/html/changelogs/mechoid - exoexpansion.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Mechoid + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Hardpoint Actuator equipment for Exosuits, allowing them (And most effectively, Ripleys) to swap components on the fly, after a short delay." + - rscadd: "Exo Inflatables Deployer, allowing exosuits to pick up and deploy inflatables." + - rscadd: "Exo screwdriver, wirecutters, and welding laser, to help round-out the tool-based equipment types." + - rscadd: "Fire modifiers based on stacks added, to be used by the damage system tweaked above." + - tweak: "Incendiary exo weapons tweaked to conform with fire change." + - tweak: "Ignition effects from weapons changed from the old fire-system to the modifier fire system." + - bugfix: "Shocker now retaliates properly against melee." diff --git a/icons/effects/effects_vr.dmi b/icons/effects/effects_vr.dmi new file mode 100644 index 0000000000..276a33bae6 Binary files /dev/null and b/icons/effects/effects_vr.dmi differ diff --git a/icons/effects/numbers.dmi b/icons/effects/numbers.dmi new file mode 100644 index 0000000000..fcf9463ccd Binary files /dev/null and b/icons/effects/numbers.dmi differ diff --git a/icons/goonstation/featherzone.dmi b/icons/goonstation/featherzone.dmi new file mode 100644 index 0000000000..65fed09ccc Binary files /dev/null and b/icons/goonstation/featherzone.dmi differ diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index cba863ea47..1fcdff0f72 100644 Binary files a/icons/mecha/mecha_equipment.dmi and b/icons/mecha/mecha_equipment.dmi differ diff --git a/icons/obj/abductor_vr.dmi b/icons/obj/abductor_vr.dmi new file mode 100644 index 0000000000..9697506706 Binary files /dev/null and b/icons/obj/abductor_vr.dmi differ diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi index 1d403bd506..da5f8ab8ed 100644 Binary files a/icons/obj/bloodpack.dmi and b/icons/obj/bloodpack.dmi differ diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi index 04150faf4c..4ca8443229 100644 Binary files a/icons/obj/device_alt.dmi and b/icons/obj/device_alt.dmi differ diff --git a/icons/obj/flight_computer_vr.dmi b/icons/obj/flight_computer_vr.dmi new file mode 100644 index 0000000000..44d87c1c72 Binary files /dev/null and b/icons/obj/flight_computer_vr.dmi differ diff --git a/icons/obj/furniture_vr.dmi b/icons/obj/furniture_vr.dmi index 28f9a702c1..4ad6fbff98 100644 Binary files a/icons/obj/furniture_vr.dmi and b/icons/obj/furniture_vr.dmi differ diff --git a/icons/obj/overmap.dmi b/icons/obj/overmap.dmi new file mode 100644 index 0000000000..859cd6c3af Binary files /dev/null and b/icons/obj/overmap.dmi differ diff --git a/icons/obj/power_vr.dmi b/icons/obj/power_vr.dmi index 1971b2d531..05a1cfa484 100644 Binary files a/icons/obj/power_vr.dmi and b/icons/obj/power_vr.dmi differ diff --git a/icons/obj/walllocker.dmi b/icons/obj/walllocker.dmi index d4d5ced3d2..57d6833b53 100644 Binary files a/icons/obj/walllocker.dmi and b/icons/obj/walllocker.dmi differ diff --git a/icons/turf/shuttle_alien_blue.dmi b/icons/turf/shuttle_alien_blue.dmi index 203c11756e..1416dd6c42 100644 Binary files a/icons/turf/shuttle_alien_blue.dmi and b/icons/turf/shuttle_alien_blue.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 865853f15c..917ff0455e 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1226,7 +1226,7 @@ window "outputwindow" background-color = #222222 is-visible = true saved-params = "" - text = "Chat is loading.\nIf nothing happens after 60s,\nuse OOC > \"Reload VChat\"." + text = "Chat is loading.\nIf nothing happens after 20s,\nuse OOC > \"Reload VChat\"." elem "htmloutput" type = BROWSER pos = 0,0 diff --git a/maps/tether/submaps/aerostat/_aerostat.dm b/maps/tether/submaps/aerostat/_aerostat.dm index 71a3b1b5e3..bda7715de7 100644 --- a/maps/tether/submaps/aerostat/_aerostat.dm +++ b/maps/tether/submaps/aerostat/_aerostat.dm @@ -4,8 +4,8 @@ /datum/shuttle_destination/excursion/virgo2orbit name = "Virgo 2 Orbit" - my_area = /area/shuttle/excursion/space - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_space" + preferred_interim_tag = "tether_excursion_transit_space" skip_me = TRUE routes_to_make = list( @@ -15,19 +15,20 @@ /datum/shuttle_destination/excursion/aerostat name = "Remmi Aerostat" - my_area = /area/shuttle/excursion/away_aerostat - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_aerostat" + preferred_interim_tag = "tether_excursion_transit_space" skip_me = TRUE routes_to_make = list( /datum/shuttle_destination/excursion/virgo2orbit = 30 SECONDS ) -/datum/shuttle/ferry/aerostat +/datum/shuttle/autodock/ferry/aerostat name = "Aerostat Ferry" + shuttle_area = /area/shuttle/aerostat warmup_time = 10 //want some warmup time so people can cancel. - area_station = /area/shuttle/aerostat/docked - area_offsite = /area/shuttle/aerostat/landed + landmark_station = "aerostat_up" + landmark_offsite = "aerostat_down" /datum/random_map/noise/ore/virgo2 descriptor = "virgo 2 ore distribution map" diff --git a/maps/tether/submaps/aerostat/aerostat.dmm b/maps/tether/submaps/aerostat/aerostat.dmm index b4d3c0d046..2275fe0c9d 100644 --- a/maps/tether/submaps/aerostat/aerostat.dmm +++ b/maps/tether/submaps/aerostat/aerostat.dmm @@ -466,7 +466,7 @@ /area/tether_away/aerostat/solars) "bd" = ( /turf/simulated/shuttle/wall, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "be" = ( /turf/simulated/floor/plating/virgo2, /area/tether_away/aerostat/inside) @@ -477,11 +477,11 @@ /area/tether_away/aerostat/inside) "bg" = ( /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "bh" = ( /obj/machinery/door/airlock/external, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "bi" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, /turf/simulated/floor/plating/virgo2, @@ -535,7 +535,7 @@ dir = 4 }, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "bs" = ( /obj/effect/floor_decal/industrial/warning/dust/corner{ dir = 1 @@ -633,11 +633,11 @@ dir = 8 }, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "bI" = ( /obj/structure/closet/emcloset, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "bJ" = ( /obj/structure/table/standard, /obj/random/cargopod, @@ -808,11 +808,11 @@ dir = 1 }, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "cl" = ( /obj/machinery/light, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/aerostat/docked) +/area/shuttle/aerostat) "cm" = ( /obj/structure/cable/heavyduty{ icon_state = "1-8" @@ -877,8 +877,14 @@ /turf/simulated/floor/plating/virgo2, /area/tether_away/aerostat/inside) "cv" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether_away/aerostat; + base_turf = /turf/unsimulated/floor/sky/virgo2_sky; + landmark_tag = "tether_excursion_aerostat"; + name = "Excursion Aerostat" + }, /turf/unsimulated/floor/sky/virgo2_sky, -/area/shuttle/excursion/away_aerostat) +/area/tether_away/aerostat) "cw" = ( /obj/effect/floor_decal/rust, /turf/simulated/floor/plating/virgo2, @@ -1650,6 +1656,15 @@ /obj/random/action_figure, /turf/simulated/floor/tiled/techfloor/virgo2, /area/tether_away/aerostat/inside) +"pd" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether_away/aerostat; + base_turf = /turf/unsimulated/floor/sky/virgo2_sky; + landmark_tag = "aerostat_up"; + name = "Remmi Aerostat" + }, +/turf/simulated/shuttle/floor/yellow, +/area/shuttle/aerostat) "tZ" = ( /obj/structure/table/standard, /obj/random/powercell, @@ -4950,10 +4965,10 @@ aw aw aw aw -cv -cv -cv -cv +aw +aw +aw +aw aw aw aw @@ -5082,21 +5097,21 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -5224,21 +5239,21 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -5365,22 +5380,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -5507,21 +5522,21 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -5648,22 +5663,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -5790,22 +5805,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -5932,22 +5947,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -6074,22 +6089,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -6216,22 +6231,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -6359,21 +6374,21 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -6501,22 +6516,22 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -6644,21 +6659,21 @@ aw aw aw aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw aw aw aw @@ -6786,21 +6801,21 @@ aw aw aw aw -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv -cv +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw aw aw aw @@ -6935,13 +6950,13 @@ aw aw aw aw -cv -cv +aw +aw aw cc cY -cv -cv +aw +aw aw aw aw @@ -16736,7 +16751,7 @@ bI br br br -bg +pd bg br br diff --git a/maps/tether/submaps/aerostat/surface.dmm b/maps/tether/submaps/aerostat/surface.dmm index 16b987a562..5b78c81cc2 100644 --- a/maps/tether/submaps/aerostat/surface.dmm +++ b/maps/tether/submaps/aerostat/surface.dmm @@ -44,8 +44,14 @@ /area/tether_away/aerostat/surface/explored) "Q" = ( /obj/effect/floor_decal/rust, +/obj/effect/shuttle_landmark{ + base_area = /area/tether_away/aerostat/surface/explored; + base_turf = /turf/simulated/floor/tiled/techfloor/virgo2; + landmark_tag = "aerostat_down"; + name = "Virgo 2 Surface" + }, /turf/simulated/floor/tiled/techfloor/virgo2, -/area/shuttle/aerostat/landed) +/area/tether_away/aerostat/surface/explored) "V" = ( /obj/structure/railing, /turf/simulated/mineral/floor/ignore_mapgen/virgo2, @@ -9494,17 +9500,17 @@ i V I I -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q +I +I +I +I +I +I +I +I +I +I +I I I I @@ -9636,17 +9642,17 @@ i V I I +I +I +I +I +I Q -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q +I +I +I +I +I I I I @@ -9778,17 +9784,17 @@ i V I I -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q +I +I +I +I +I +I +I +I +I +I +I I I I @@ -9920,17 +9926,17 @@ i V I I -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q +I +I +I +I +I +I +I +I +I +I +I I I I @@ -10062,17 +10068,17 @@ i V I I -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q -Q +I +I +I +I +I +I +I +I +I +I +I I I I diff --git a/maps/tether/submaps/alienship/_alienship.dm b/maps/tether/submaps/alienship/_alienship.dm index e204da0e90..bcd5775243 100644 --- a/maps/tether/submaps/alienship/_alienship.dm +++ b/maps/tether/submaps/alienship/_alienship.dm @@ -2,8 +2,8 @@ /datum/shuttle_destination/excursion/alienship name = "Unknown Ship" - my_area = /area/shuttle/excursion/away_alienship - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_alienship" + preferred_interim_tag = "tether_excursion_transit_space" skip_me = TRUE routes_to_make = list( diff --git a/maps/tether/submaps/alienship/alienship.dmm b/maps/tether/submaps/alienship/alienship.dmm index 9c590a9408..18737671f6 100644 --- a/maps/tether/submaps/alienship/alienship.dmm +++ b/maps/tether/submaps/alienship/alienship.dmm @@ -22,8 +22,14 @@ /turf/simulated/shuttle/wall/alien/hard_corner, /area/tether_away/alienship) "ah" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether_away/alienship; + base_turf = /turf/simulated/shuttle/floor/alienplating; + landmark_tag = "tether_excursion_alienship"; + name = "Excursion Alienship" + }, /turf/simulated/shuttle/floor/alienplating, -/area/shuttle/excursion/away_alienship) +/area/tether_away/alienship/equip_dump) "ai" = ( /obj/machinery/door/airlock/alien/locked, /turf/simulated/shuttle/floor/alienplating, @@ -567,6 +573,12 @@ /obj/item/trash/liquidfood, /turf/simulated/shuttle/floor/alien, /area/tether_away/alienship) +"wE" = ( +/turf/simulated/shuttle/wall/alien, +/area/tether_away/alienship/equip_dump) +"Bk" = ( +/turf/simulated/shuttle/floor/alien, +/area/tether_away/alienship/equip_dump) "Rx" = ( /obj/item/weapon/reagent_containers/food/snacks/liquidfood, /turf/simulated/shuttle/floor/alien, @@ -9438,25 +9450,25 @@ ac ae ae ae -ac -ac -af -af -ae -ae -ae -ae +wE +wE +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE aE aE aE aE -ah -ah -ah -ah -ae -ae af af ac @@ -9580,25 +9592,25 @@ ac ae ac ac -ac -af -af -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +wE +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE ae uA uA @@ -9722,25 +9734,25 @@ ac ac ac af -af -af -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE ae ae af @@ -9864,24 +9876,24 @@ ab ab ac af -ae -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE gv ae @@ -10006,23 +10018,23 @@ ab aa ac af -ae -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE aE ae @@ -10148,24 +10160,24 @@ aa aa ac af -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE ae ae @@ -10290,24 +10302,24 @@ ac ac ag af -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE ae ae @@ -10432,25 +10444,25 @@ af af am af -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae -ae +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE ae ae ae @@ -10574,24 +10586,24 @@ ac ac ag af -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE ae ae @@ -10716,24 +10728,24 @@ aa aa ac af -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE ae ae @@ -10858,23 +10870,23 @@ ab aa ac af -ae -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE aE aE ae @@ -11000,25 +11012,25 @@ ab ab ac af -ae -ae -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE ae ae ae @@ -11142,25 +11154,25 @@ ac ac ac af -af -af -ae +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +aE +aE +aE +aE +aE ae ae af @@ -11284,25 +11296,25 @@ ac ae ac ac -ac -af -af -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ah -ae +wE +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE ae af af @@ -11426,25 +11438,25 @@ ac ae ae ae -ac -ac -af -af -ae -ae -ae -ae -ae -ae -ah -ah -ae -ae -ae -ah -ah -ae -ae +wE +wE +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE af af ac @@ -11568,25 +11580,25 @@ ac ac ac ae -ae -ac -ac -af -af -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -af +aE +wE +wE +Bk +Bk +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +Bk uA ac ac diff --git a/maps/tether/submaps/beach/_beach.dm b/maps/tether/submaps/beach/_beach.dm index cb520d260d..2ef393b617 100644 --- a/maps/tether/submaps/beach/_beach.dm +++ b/maps/tether/submaps/beach/_beach.dm @@ -3,8 +3,8 @@ //We're including two new shuttle destinations. One is in orbit of our 'desert planet' /datum/shuttle_destination/excursion/virgo4orbit //Must be a unique path name = "Virgo 4 Orbit" //The name of the destination - my_area = /area/shuttle/excursion/space //The area the shuttle goes when it's settled at this destination - preferred_interim_area = /area/shuttle/excursion/space_moving //The area the shuttle goes while it's moving there + my_landmark = "tether_excursion_space" //The area the shuttle goes when it's settled at this destination + preferred_interim_tag = "tether_excursion_transit_space" //The area the shuttle goes while it's moving there skip_me = TRUE //Must be TRUE on all away-mission destinations for reasons routes_to_make = list( //These are routes the shuttle connects to, @@ -14,8 +14,8 @@ //The other destination is landed on the surface /datum/shuttle_destination/excursion/beach name = "Remote Coastal Area" - my_area = /area/shuttle/excursion/away_beach - preferred_interim_area = /area/shuttle/excursion/sand_moving + my_landmark = "tether_excursion_beach" + preferred_interim_tag = "tether_excursion_transit_sand" skip_me = TRUE routes_to_make = list( diff --git a/maps/tether/submaps/beach/beach.dmm b/maps/tether/submaps/beach/beach.dmm index 5c73d730aa..b5948df7a9 100644 --- a/maps/tether/submaps/beach/beach.dmm +++ b/maps/tether/submaps/beach/beach.dmm @@ -308,8 +308,14 @@ /turf/unsimulated/wall/planetary/normal, /area/tether_away/beach/jungle) "bm" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether_away/beach/jungle; + base_turf = /turf/simulated/floor/beach/sand/desert; + landmark_tag = "tether_excursion_beach"; + name = "Excursion Beach" + }, /turf/simulated/floor/beach/sand/desert, -/area/shuttle/excursion/away_beach) +/area/tether_away/beach/jungle) "bn" = ( /mob/living/simple_mob/animal/passive/fish/measelshark, /turf/simulated/floor/water/deep/ocean, @@ -8222,10 +8228,10 @@ aa aa aa aa -bm -bm -bm -bm +aa +aa +aa +aa aa aa aa @@ -8354,21 +8360,21 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -8496,21 +8502,21 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -8637,22 +8643,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -8779,21 +8785,21 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -8920,22 +8926,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9062,22 +9068,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9204,22 +9210,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa bs @@ -9346,22 +9352,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9488,22 +9494,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9631,21 +9637,21 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9773,22 +9779,22 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -9916,21 +9922,21 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa aa aa aa @@ -10058,21 +10064,21 @@ aa aa aa aa -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm -bm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -10207,13 +10213,13 @@ aa aa aa aa -bm -bm aa aa aa -bm -bm +aa +aa +aa +aa aa aa aa diff --git a/maps/tether/submaps/rogue_mines/rogue_mine1.dmm b/maps/tether/submaps/rogue_mines/rogue_mine1.dmm index 5410af2501..9df2ffbf5c 100644 --- a/maps/tether/submaps/rogue_mines/rogue_mine1.dmm +++ b/maps/tether/submaps/rogue_mines/rogue_mine1.dmm @@ -7,8 +7,14 @@ /turf/space, /area/asteroid/rogue/zone1) "c" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/asteroid/rogue/zone1; + base_turf = /turf/space; + landmark_tag = "belter_zone1"; + name = "Belter Area" + }, /turf/space, -/area/shuttle/belter/belt/zone1) +/area/asteroid/rogue/zone1) "d" = ( /obj/effect/step_trigger/teleporter/roguemine_loop/west, /turf/space, @@ -9469,11 +9475,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9611,11 +9617,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9753,11 +9759,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9895,11 +9901,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10037,11 +10043,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10179,11 +10185,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10321,11 +10327,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10463,11 +10469,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10605,11 +10611,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10748,9 +10754,9 @@ a a a a +a c -c -c +a a a a diff --git a/maps/tether/submaps/rogue_mines/rogue_mine2.dmm b/maps/tether/submaps/rogue_mines/rogue_mine2.dmm index 92b884dc8d..31092f3633 100644 --- a/maps/tether/submaps/rogue_mines/rogue_mine2.dmm +++ b/maps/tether/submaps/rogue_mines/rogue_mine2.dmm @@ -7,8 +7,14 @@ /turf/space, /area/asteroid/rogue/zone2) "c" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/asteroid/rogue/zone2; + base_turf = /turf/space; + landmark_tag = "belter_zone2"; + name = "Belter Area" + }, /turf/space, -/area/shuttle/belter/belt/zone2) +/area/asteroid/rogue/zone2) "d" = ( /obj/effect/step_trigger/teleporter/roguemine_loop/west, /turf/space, @@ -9469,11 +9475,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9611,11 +9617,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9753,11 +9759,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9895,11 +9901,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10037,11 +10043,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10179,11 +10185,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10321,11 +10327,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10463,11 +10469,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10605,11 +10611,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10748,9 +10754,9 @@ a a a a +a c -c -c +a a a a diff --git a/maps/tether/submaps/rogue_mines/rogue_mine3.dmm b/maps/tether/submaps/rogue_mines/rogue_mine3.dmm index a3ee3d8d4c..6bbb7bdd58 100644 --- a/maps/tether/submaps/rogue_mines/rogue_mine3.dmm +++ b/maps/tether/submaps/rogue_mines/rogue_mine3.dmm @@ -7,8 +7,14 @@ /turf/space, /area/asteroid/rogue/zone3) "c" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/asteroid/rogue/zone3; + base_turf = /turf/space; + landmark_tag = "belter_zone3"; + name = "Belter Area" + }, /turf/space, -/area/shuttle/belter/belt/zone3) +/area/asteroid/rogue/zone3) "d" = ( /obj/effect/step_trigger/teleporter/roguemine_loop/west, /turf/space, @@ -9469,11 +9475,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9611,11 +9617,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9753,11 +9759,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9895,11 +9901,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10037,11 +10043,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10179,11 +10185,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10321,11 +10327,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10463,11 +10469,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10605,11 +10611,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10748,9 +10754,9 @@ a a a a +a c -c -c +a a a a diff --git a/maps/tether/submaps/rogue_mines/rogue_mine4.dmm b/maps/tether/submaps/rogue_mines/rogue_mine4.dmm index d141369b94..1c9cf37ade 100644 --- a/maps/tether/submaps/rogue_mines/rogue_mine4.dmm +++ b/maps/tether/submaps/rogue_mines/rogue_mine4.dmm @@ -7,8 +7,14 @@ /turf/space, /area/asteroid/rogue/zone4) "c" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/asteroid/rogue/zone4; + base_turf = /turf/space; + landmark_tag = "belter_zone4"; + name = "Belter Area" + }, /turf/space, -/area/shuttle/belter/belt/zone4) +/area/asteroid/rogue/zone4) "d" = ( /obj/effect/step_trigger/teleporter/roguemine_loop/west, /turf/space, @@ -9469,11 +9475,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9611,11 +9617,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9753,11 +9759,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -9895,11 +9901,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10037,11 +10043,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10179,11 +10185,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10321,11 +10327,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10463,11 +10469,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10605,11 +10611,11 @@ a a a a -c -c -c -c -c +a +a +a +a +a a a a @@ -10748,9 +10754,9 @@ a a a a +a c -c -c +a a a a diff --git a/maps/tether/submaps/space/_debrisfield.dm b/maps/tether/submaps/space/_debrisfield.dm index 388cd6c067..ba141f49a0 100644 --- a/maps/tether/submaps/space/_debrisfield.dm +++ b/maps/tether/submaps/space/_debrisfield.dm @@ -2,8 +2,8 @@ /datum/shuttle_destination/excursion/debrisfield name = "Debris Field" - my_area = /area/shuttle/excursion/debrisfield - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_debrisfield" + preferred_interim_tag = "tether_excursion_transit_space" skip_me = TRUE routes_to_make = list( diff --git a/maps/tether/submaps/space/debrisfield.dmm b/maps/tether/submaps/space/debrisfield.dmm index 6c81a0e4ac..458ca929bc 100644 --- a/maps/tether/submaps/space/debrisfield.dmm +++ b/maps/tether/submaps/space/debrisfield.dmm @@ -14,8 +14,14 @@ /turf/space, /area/tether_away/debrisfield/explored) "f" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether_away/debrisfield/explored; + base_turf = /turf/space; + landmark_tag = "tether_excursion_debrisfield"; + name = "Excursion Debrisfield" + }, /turf/space, -/area/shuttle/excursion/debrisfield) +/area/tether_away/debrisfield/explored) "g" = ( /obj/effect/step_trigger/teleporter/debrisfield_loop/east, /turf/space, @@ -8623,10 +8629,10 @@ b b b b -f -f -f -f +b +b +b +b b b b @@ -8755,21 +8761,21 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -8897,21 +8903,21 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -9038,22 +9044,22 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -9180,21 +9186,21 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -9321,22 +9327,22 @@ a b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -9463,22 +9469,22 @@ a b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -9605,22 +9611,22 @@ a b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b c @@ -9747,22 +9753,22 @@ a b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -9889,22 +9895,22 @@ a b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -10032,21 +10038,21 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -10174,22 +10180,22 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -10317,21 +10323,21 @@ b b b b +b +b +b +b +b +b +b +b +b +b f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b b b b @@ -10459,21 +10465,21 @@ b b b b -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b b b b @@ -10608,13 +10614,13 @@ b b b b -f -f b b b -f -f +b +b +b +b b b b diff --git a/maps/tether/submaps/tether_misc.dmm b/maps/tether/submaps/tether_misc.dmm index d3d8f06b83..dbef82d90c 100644 --- a/maps/tether/submaps/tether_misc.dmm +++ b/maps/tether/submaps/tether_misc.dmm @@ -3,6 +3,14 @@ /obj/machinery/vending/coffee, /turf/unsimulated/beach/sand, /area/beach) +"ab" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 9 + }, +/obj/structure/closet/secure_closet/guncabinet/excursion, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "ag" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -10,12 +18,12 @@ }, /obj/structure/closet/crate/secure, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ah" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/closet/crate/secure, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ai" = ( /obj/effect/floor_decal/transit/orange{ dir = 8 @@ -66,7 +74,7 @@ tag_door = "trade_shuttle_hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "an" = ( /obj/structure/table/rack, /obj/effect/floor_decal/corner/red{ @@ -243,7 +251,7 @@ /area/space) "aC" = ( /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "aD" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hos, @@ -275,7 +283,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "aF" = ( /obj/structure/table/glass, /turf/unsimulated/floor{ @@ -298,7 +306,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "aH" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -314,7 +322,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "aI" = ( /obj/structure/window/reinforced{ dir = 4 @@ -418,7 +426,7 @@ /area/space) "bc" = ( /turf/simulated/shuttle/wall, -/area/supply/dock) +/area/shuttle/supply) "bd" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/holofloor/desert, @@ -464,7 +472,7 @@ /area/holodeck/source_emptycourt) "bn" = ( /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "bo" = ( /obj/structure/flora/ausbushes/brflowers, /obj/effect/floor_decal/spline/fancy/wood/corner, @@ -549,13 +557,13 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "bz" = ( /obj/machinery/light{ dir = 4 }, /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "bA" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/effect/floor_decal/spline/fancy/wood, @@ -702,14 +710,14 @@ id = "QMLoad2" }, /turf/simulated/shuttle/plating, -/area/supply/dock) +/area/shuttle/supply) "bR" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad2" }, /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "bS" = ( /obj/structure/table/woodentable/holotable, /turf/simulated/floor/holofloor/desert, @@ -842,7 +850,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ch" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -850,15 +858,22 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ci" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "merc_base"; + landmark_tag = "merc_base"; + name = "The Hideaway" + }, /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cj" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 8; @@ -868,7 +883,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ck" = ( /obj/machinery/light{ dir = 8; @@ -879,7 +894,7 @@ dir = 8 }, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cl" = ( /obj/structure/table/standard, /obj/structure/closet/secure_closet/medical_wall{ @@ -900,21 +915,21 @@ }, /obj/item/weapon/reagent_containers/syringe, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cm" = ( /obj/machinery/sleep_console, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cn" = ( /obj/machinery/body_scanconsole, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "co" = ( /obj/machinery/bodyscanner{ dir = 8 }, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cp" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -929,13 +944,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cq" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible, /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cr" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -943,7 +958,7 @@ dir = 1 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cs" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -953,7 +968,7 @@ name = "Shuttle Hatch" }, /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "ct" = ( /obj/structure/holostool, /obj/effect/floor_decal/carpet{ @@ -1014,12 +1029,12 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cD" = ( /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cE" = ( /obj/machinery/vending/medical{ density = 0; @@ -1027,20 +1042,20 @@ req_access = null }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "cF" = ( /obj/machinery/atmospherics/pipe/tank/air{ dir = 4; start_pressure = 740.5 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cG" = ( /obj/structure/table/standard, /obj/item/stack/cable_coil/black, /obj/item/weapon/storage/toolbox/syndicate, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cH" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hos, @@ -1060,10 +1075,10 @@ req_access = list(150) }, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cJ" = ( /turf/simulated/shuttle/wall/dark/hard_corner, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cK" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1331; @@ -1083,7 +1098,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cL" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -1092,7 +1107,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cM" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1331; @@ -1103,7 +1118,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cN" = ( /obj/structure/bed/chair/comfy/black{ dir = 4 @@ -1111,7 +1126,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cO" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller{ frequency = 1380; @@ -1122,7 +1137,7 @@ tag_door = "supply_shuttle_hatch" }, /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "cP" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/effect/floor_decal/spline/fancy/wood{ @@ -1178,21 +1193,21 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cW" = ( /obj/structure/table/glass, /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cX" = ( /obj/machinery/vending/boozeomat, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cY" = ( /obj/machinery/vending/food, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "cZ" = ( /obj/structure/table/standard, /obj/item/weapon/reagent_containers/blood/OMinus, @@ -1206,7 +1221,7 @@ syndie = 1 }, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "da" = ( /obj/structure/flora/ausbushes/brflowers, /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -1250,7 +1265,7 @@ /area/holodeck/source_emptycourt) "dg" = ( /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "dh" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -1264,14 +1279,14 @@ id = "QMLoad" }, /turf/simulated/shuttle/plating, -/area/supply/dock) +/area/shuttle/supply) "di" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" }, /turf/simulated/shuttle/floor, -/area/supply/dock) +/area/shuttle/supply) "dj" = ( /obj/structure/holostool, /obj/effect/floor_decal/carpet{ @@ -1429,12 +1444,12 @@ /area/holodeck/source_emptycourt) "dy" = ( /turf/simulated/shuttle/wall/dark/hard_corner, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "dz" = ( /turf/simulated/shuttle/wall/dark/hard_corner, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "dA" = ( @@ -1455,11 +1470,11 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "dD" = ( /obj/machinery/computer/shuttle_control/multi/tether_antag_ground, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "dE" = ( @@ -1468,7 +1483,7 @@ dir = 1 }, /turf/simulated/floor/airless, -/area/supply/dock) +/area/shuttle/supply) "dF" = ( /turf/simulated/floor/holofloor/space, /area/holodeck/source_space) @@ -1594,7 +1609,7 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eb" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_r"; @@ -1602,7 +1617,7 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ec" = ( /obj/effect/landmark{ name = "Holocarp Spawn Random" @@ -1736,12 +1751,12 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ey" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ez" = ( /obj/structure/closet/secure_closet/medical_wall{ pixel_x = 0; @@ -1764,7 +1779,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eA" = ( /obj/structure/bed/chair/comfy/black{ dir = 1 @@ -1772,13 +1787,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eB" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/sign/nosmoking_1, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eC" = ( /obj/structure/window/reinforced{ dir = 1 @@ -1792,7 +1807,7 @@ dir = 8 }, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eD" = ( /obj/machinery/light{ dir = 8; @@ -1802,7 +1817,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eE" = ( /obj/machinery/door/window{ dir = 1; @@ -1810,24 +1825,24 @@ req_access = list(150) }, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eF" = ( /obj/structure/sign/department/operational, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eG" = ( /obj/structure/shuttle/engine/propulsion{ dir = 4 }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eH" = ( /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eI" = ( /obj/structure/sink{ dir = 4; @@ -1848,7 +1863,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/stoxin, /obj/item/weapon/reagent_containers/glass/bottle/stoxin, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eJ" = ( /obj/structure/flora/tree/dead, /turf/simulated/floor/holofloor/snow, @@ -1892,7 +1907,7 @@ /area/holodeck/source_boxingcourt) "eS" = ( /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "eT" = ( /obj/structure/flora/grass/green, /turf/simulated/floor/holofloor/snow, @@ -2021,7 +2036,7 @@ dir = 4 }, /turf/simulated/shuttle/plating/airless, -/area/syndicate_station/start) +/area/shuttle/mercenary) "fl" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_l"; @@ -2029,7 +2044,7 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/syndicate_station/start) +/area/shuttle/mercenary) "fm" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -2044,7 +2059,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "fn" = ( /obj/structure/holostool, /obj/effect/floor_decal/carpet{ @@ -2123,7 +2138,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "fz" = ( /obj/effect/floor_decal/corner/green{ dir = 9 @@ -2167,7 +2182,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "fG" = ( /obj/structure/flora/grass/brown, /turf/simulated/floor/holofloor/snow, @@ -2506,20 +2521,20 @@ /obj/item/weapon/storage/firstaid/regular, /obj/structure/table/reinforced, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gG" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/sign/department/medbay, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gH" = ( /obj/structure/medical_stand, /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gI" = ( /obj/item/roller, /obj/item/roller, @@ -2527,7 +2542,7 @@ /obj/structure/table/reinforced, /obj/item/bodybag/cryobag, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gJ" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -2546,11 +2561,11 @@ }, /obj/item/stack/medical/advanced/bruise_pack, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gK" = ( /obj/machinery/optable, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gL" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -2566,7 +2581,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gM" = ( /obj/structure/table/rack, /obj/item/ammo_magazine/m380, @@ -2579,7 +2594,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gN" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/holofloor/desert, @@ -2646,7 +2661,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "gZ" = ( /obj/machinery/vending/cigarette{ name = "hacked cigarette machine"; @@ -2656,7 +2671,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ha" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -2669,7 +2684,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hb" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -2688,7 +2703,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hc" = ( /obj/structure/table/steel_reinforced, /obj/machinery/button/remote/blast_door{ @@ -2699,11 +2714,11 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hd" = ( /obj/structure/sign/department/bridge, /turf/simulated/shuttle/wall/dark/hard_corner, -/area/syndicate_station/start) +/area/shuttle/mercenary) "he" = ( /obj/machinery/light{ dir = 8; @@ -2713,13 +2728,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hf" = ( /obj/structure/bed/chair, /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hg" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/effect/landmark{ @@ -2797,7 +2812,7 @@ dir = 8 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "hr" = ( @@ -2831,7 +2846,7 @@ }, /obj/item/weapon/surgical/surgicaldrill, /turf/simulated/shuttle/floor, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ht" = ( /obj/structure/toilet{ dir = 4 @@ -2872,7 +2887,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hx" = ( /turf/simulated/floor/holofloor/wood, /area/holodeck/holodorm/source_seating) @@ -3053,13 +3068,13 @@ /obj/structure/window/reinforced/full, /obj/structure/sign/department/telecoms, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hV" = ( /obj/structure/closet, /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hW" = ( /obj/structure/closet, /obj/item/weapon/reagent_containers/food/snacks/liquidfood, @@ -3069,7 +3084,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hX" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -3083,7 +3098,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hY" = ( /obj/machinery/computer/shuttle_control/multi/syndicate{ dir = 4 @@ -3091,10 +3106,10 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "hZ" = ( /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "ia" = ( @@ -3180,7 +3195,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ii" = ( /obj/machinery/computer/security/nuclear{ dir = 4; @@ -3189,11 +3204,11 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ij" = ( /obj/machinery/computer/shuttle_control/multi/tether_antag_space, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "ik" = ( @@ -3212,7 +3227,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "il" = ( /obj/structure/table/steel_reinforced, /obj/machinery/button/remote/blast_door{ @@ -3223,7 +3238,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "im" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller{ frequency = 1380; @@ -3255,16 +3270,18 @@ icon = 'icons/turf/transit_vr.dmi' }, /area/centcom/ferry) -"io" = ( -/turf/unsimulated/floor/maglev{ - icon = 'icons/turf/transit_vr.dmi' - }, -/area/shuttle/escape/transit) "ip" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/centcom/ferry; + base_turf = /turf/simulated/floor/tiled/techfloor/grid; + docking_controller = null; + landmark_tag = "escape_transit"; + name = "Escape Transit" + }, /turf/unsimulated/floor/techfloor_grid{ icon = 'icons/turf/transit_vr.dmi' }, -/area/shuttle/escape/transit) +/area/centcom/ferry) "iq" = ( /obj/effect/floor_decal/transit/orange{ dir = 4 @@ -3292,7 +3309,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "is" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -3309,7 +3326,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "it" = ( /obj/structure/bed/chair{ dir = 1 @@ -3317,13 +3334,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iu" = ( /obj/structure/bed/chair{ dir = 8 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "iv" = ( @@ -3345,19 +3362,19 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iw" = ( /obj/machinery/teleport/station, /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ix" = ( /obj/structure/frame/computer, /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iy" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -3376,7 +3393,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iB" = ( /obj/machinery/vending/snack{ name = "hacked Getmore Chocolate Corp"; @@ -3385,10 +3402,10 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iC" = ( /turf/simulated/shuttle/wall/dark/hard_corner, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iD" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -3398,24 +3415,24 @@ name = "Shuttle Hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iE" = ( /turf/simulated/shuttle/wall/dark, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iF" = ( /obj/machinery/washing_machine, /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iG" = ( /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iH" = ( /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "iI" = ( @@ -3435,7 +3452,7 @@ dir = 8 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iJ" = ( /obj/structure/window/reinforced, /obj/machinery/door/blast/shutters{ @@ -3450,7 +3467,7 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iK" = ( /obj/structure/window/reinforced, /obj/machinery/door/blast/shutters{ @@ -3468,7 +3485,7 @@ dir = 4 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iL" = ( /obj/machinery/recharger/wallcharger{ pixel_x = 5; @@ -3477,21 +3494,21 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iM" = ( /obj/machinery/light/small{ dir = 4; pixel_y = 0 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iN" = ( /obj/structure/shuttle/engine/heater{ icon_state = "heater"; dir = 4 }, /turf/simulated/shuttle/plating/airless, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iO" = ( /obj/fiftyspawner/rods, /turf/unsimulated/floor{ @@ -3542,7 +3559,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iQ" = ( /obj/machinery/door/airlock/silver{ name = "Toilet" @@ -3550,7 +3567,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iR" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -3561,7 +3578,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "iS" = ( /obj/structure/closet{ icon_closed = "cabinet_closed"; @@ -3569,50 +3586,50 @@ icon_state = "cabinet_closed" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iT" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/rd, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iU" = ( /obj/structure/table/standard, /obj/machinery/chemical_dispenser/bar_alc/full, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iV" = ( /obj/structure/table/standard, /obj/machinery/microwave, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iW" = ( /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iX" = ( /obj/structure/bed/chair, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iY" = ( /obj/structure/flora/pottedplant{ icon_state = "plant-22" }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "iZ" = ( /obj/machinery/sleep_console{ dir = 8 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ja" = ( /obj/machinery/sleeper{ dir = 4 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jc" = ( /obj/structure/mirror{ pixel_x = 0; @@ -3627,7 +3644,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "jd" = ( /obj/machinery/door/airlock/centcom{ name = "Equipment Storage"; @@ -3636,7 +3653,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "je" = ( /obj/structure/window/reinforced{ dir = 4 @@ -3657,56 +3674,56 @@ dir = 8 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jf" = ( /obj/machinery/newscaster{ pixel_y = 32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jg" = ( /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jh" = ( /obj/machinery/door/airlock/silver{ name = "Sleeping" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ji" = ( /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jj" = ( /obj/structure/table/standard, /obj/item/weapon/storage/box/donkpockets, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jk" = ( /obj/structure/bed/chair{ dir = 8 }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jl" = ( /obj/machinery/atm{ pixel_x = -32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jm" = ( /obj/machinery/suit_cycler/syndicate, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jn" = ( /obj/machinery/bodyscanner{ dir = 8 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jo" = ( /obj/machinery/body_scanconsole, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jp" = ( /obj/item/weapon/storage/firstaid/regular{ pixel_x = -2; @@ -3753,14 +3770,14 @@ pixel_y = 32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jq" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jr" = ( /obj/structure/bed/chair{ dir = 1 @@ -3771,7 +3788,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "js" = ( @@ -3781,7 +3798,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "jt" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -3790,7 +3807,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ju" = ( /obj/structure/window/reinforced{ dir = 4 @@ -3809,11 +3826,11 @@ dir = 8 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jv" = ( /obj/structure/closet/wardrobe/pjs, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jw" = ( /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -3825,7 +3842,7 @@ /obj/machinery/light, /obj/structure/table/glass, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jx" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hos, @@ -3833,37 +3850,37 @@ pixel_y = -32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jy" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jz" = ( /obj/structure/table/standard, /obj/item/weapon/storage/box/glasses/square, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jA" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/inflatable_duck, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jB" = ( /obj/structure/table/steel_reinforced, /obj/item/stack/material/mhydrogen, /obj/item/stack/material/diamond, /obj/item/stack/material/sandstone, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jC" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/rig/internalaffairs, /obj/item/clothing/head/helmet/space/void/wizard, /obj/item/clothing/suit/space/void/wizard, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jD" = ( /obj/structure/table/steel_reinforced, /obj/random/tool, @@ -3872,14 +3889,14 @@ /obj/random/tool, /obj/random/tool, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jE" = ( /obj/structure/table/steel_reinforced, /obj/random/toolbox, /obj/random/toolbox, /obj/random/toolbox, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jF" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3892,7 +3909,7 @@ dir = 4 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jG" = ( /obj/vehicle/train/engine, /obj/machinery/light{ @@ -3901,10 +3918,10 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jH" = ( /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jI" = ( /obj/machinery/door/airlock/glass_medical{ name = "Medical Bay"; @@ -3912,11 +3929,11 @@ req_one_access = newlist() }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jJ" = ( /obj/machinery/optable, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jL" = ( /obj/machinery/vending/coffee{ name = "hacked Hot Drinks machine"; @@ -3928,13 +3945,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "jM" = ( /obj/structure/closet/walllocker/emerglocker{ pixel_y = -32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jN" = ( /obj/machinery/button/remote/blast_door{ id = "tradestarshutters"; @@ -3943,7 +3960,7 @@ req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jO" = ( /obj/structure/table/steel_reinforced, /obj/random/firstaid, @@ -3951,26 +3968,26 @@ /obj/random/firstaid, /obj/random/firstaid, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jP" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jQ" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jR" = ( /obj/effect/floor_decal/industrial/warning{ dir = 5 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jS" = ( /obj/structure/table/steel_reinforced, /obj/random/tech_supply, @@ -3981,7 +3998,7 @@ /obj/random/tech_supply, /obj/item/weapon/weldpack, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jT" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3991,19 +4008,19 @@ dir = 4 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jU" = ( /obj/vehicle/train/trolley, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jV" = ( /obj/machinery/light, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jW" = ( /obj/structure/closet/wardrobe/captain, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jX" = ( /obj/machinery/door/airlock/silver{ name = "Restroom" @@ -4014,14 +4031,14 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "jY" = ( /obj/machinery/door/airlock/multi_tile/glass{ dir = 4; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "jZ" = ( /obj/structure/table/steel_reinforced, /obj/random/medical, @@ -4030,14 +4047,14 @@ /obj/random/medical, /obj/structure/window/reinforced, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ka" = ( /obj/machinery/door/window/southleft{ name = "Cargo Hold"; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kb" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/coin/uranium, @@ -4049,14 +4066,14 @@ /obj/item/weapon/coin/diamond, /obj/structure/window/reinforced, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kc" = ( /obj/machinery/door/window/southright{ name = "Cargo Hold"; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kd" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/cell/high, @@ -4065,7 +4082,7 @@ /obj/item/weapon/cell/potato, /obj/structure/window/reinforced, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ke" = ( /obj/structure/window/reinforced{ dir = 8 @@ -4076,7 +4093,7 @@ dir = 4 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kf" = ( /obj/structure/table/standard, /obj/item/clothing/gloves/sterile/latex, @@ -4106,11 +4123,11 @@ pixel_y = 3 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kg" = ( /obj/structure/medical_stand, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kh" = ( /obj/machinery/door/blast/shutters{ density = 0; @@ -4128,7 +4145,7 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ki" = ( /obj/machinery/door/blast/shutters{ density = 0; @@ -4146,25 +4163,25 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kj" = ( /obj/machinery/vending/coffee, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kk" = ( /obj/machinery/light{ dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kl" = ( /obj/machinery/door/airlock/multi_tile/glass, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "km" = ( /obj/structure/closet/crate/secure/weapon, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kn" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/paper_bin{ @@ -4175,21 +4192,21 @@ pixel_y = 4 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ko" = ( /obj/structure/table/steel_reinforced, /obj/machinery/newscaster{ pixel_x = 32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kp" = ( /obj/structure/toilet, /obj/machinery/light/small{ dir = 1 }, /turf/simulated/shuttle/floor/white, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kq" = ( /obj/structure/sink{ icon_state = "sink"; @@ -4199,28 +4216,28 @@ }, /obj/machinery/light/small, /turf/simulated/shuttle/floor/white, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kr" = ( /obj/structure/mirror{ pixel_x = 0; pixel_y = 28 }, /turf/simulated/shuttle/floor/white, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ks" = ( /obj/structure/curtain/open/shower, /obj/machinery/shower{ pixel_y = 3 }, /turf/simulated/shuttle/floor/white, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kt" = ( /obj/machinery/vending/snack{ name = "hacked Getmore Chocolate Corp"; prices = list() }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ku" = ( /obj/structure/window/reinforced, /obj/structure/grille, @@ -4234,7 +4251,7 @@ dir = 8 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kv" = ( /obj/machinery/light{ dir = 8; @@ -4242,7 +4259,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kw" = ( /obj/machinery/door/blast/shutters{ density = 0; @@ -4263,11 +4280,11 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kx" = ( /obj/structure/frame/computer, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ky" = ( /obj/machinery/light{ dir = 4 @@ -4279,23 +4296,23 @@ }, /mob/living/simple_mob/animal/passive/dog/tamaskan/Spice, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kz" = ( /obj/machinery/door/airlock/silver{ name = "Toilet" }, /turf/simulated/shuttle/floor/white, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kA" = ( /obj/machinery/door/airlock/silver{ name = "Restroom" }, /turf/simulated/shuttle/floor/white, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kB" = ( /obj/structure/undies_wardrobe, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kC" = ( /obj/machinery/vending/cigarette{ name = "Cigarette machine"; @@ -4303,14 +4320,14 @@ products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kD" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 }, /obj/structure/largecrate/animal/cat, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kE" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -4318,7 +4335,7 @@ }, /obj/structure/largecrate/animal/cow, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kF" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -4326,7 +4343,7 @@ }, /obj/structure/closet/crate/freezer/rations, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kG" = ( /obj/structure/table/rack, /obj/effect/floor_decal/industrial/warning{ @@ -4338,7 +4355,7 @@ /obj/item/device/kit/paint/ripley/flames_red, /obj/item/device/kit/paint/ripley, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kI" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -4346,14 +4363,14 @@ }, /obj/structure/largecrate/hoverpod, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kJ" = ( /obj/effect/floor_decal/industrial/warning{ dir = 5 }, /obj/mecha/working/ripley/mining, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kK" = ( /obj/machinery/door/window/westright{ name = "Storefront"; @@ -4369,13 +4386,13 @@ opacity = 0 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kL" = ( /obj/structure/bed/chair/office/dark{ dir = 8 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kM" = ( /obj/machinery/door/blast/shutters{ density = 0; @@ -4394,7 +4411,7 @@ dir = 8 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kN" = ( /obj/machinery/computer/shuttle_control{ name = "Beruang control console"; @@ -4402,13 +4419,13 @@ shuttle_tag = "Trade" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kO" = ( /obj/structure/bed/chair{ dir = 8 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kP" = ( /obj/machinery/door/airlock/command{ name = "Bridge"; @@ -4416,30 +4433,30 @@ req_one_access = newlist() }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kQ" = ( /obj/structure/noticeboard{ pixel_y = 32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kR" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10 }, /obj/structure/largecrate/animal/corgi, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kS" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/largecrate/animal/corgi, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kT" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/closet/crate/internals, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kU" = ( /obj/structure/table/rack, /obj/effect/floor_decal/industrial/warning, @@ -4449,19 +4466,19 @@ /obj/item/device/kit/paint/durand/phazon, /obj/item/device/kit/paint/durand/seraph, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kW" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/largecrate/hoverpod, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kX" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 }, /obj/mecha/working/ripley/firefighter, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kY" = ( /obj/machinery/door/window/westleft{ name = "Storefront"; @@ -4478,11 +4495,11 @@ }, /obj/structure/table/marble, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "kZ" = ( /obj/machinery/computer/arcade/battle, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "la" = ( /obj/structure/table/steel_reinforced, /obj/machinery/button/remote/blast_door{ @@ -4497,7 +4514,7 @@ pixel_y = 8 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lb" = ( /obj/machinery/vending/assist{ contraband = null; @@ -4505,7 +4522,7 @@ products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lc" = ( /obj/structure/closet{ name = "custodial" @@ -4514,11 +4531,11 @@ /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/mop, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ld" = ( /obj/machinery/vending/sovietsoda, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "le" = ( /obj/machinery/light, /obj/structure/table/standard, @@ -4527,27 +4544,27 @@ color = "#0000FF" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lf" = ( /obj/structure/sign/poster{ pixel_y = -32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lg" = ( /obj/machinery/door/airlock/multi_tile/glass{ dir = 2; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lh" = ( /obj/machinery/door/window/westleft{ name = "Storefront"; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "li" = ( /obj/machinery/button/remote/blast_door{ id = "trade"; @@ -4556,7 +4573,7 @@ pixel_y = -26 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lj" = ( /obj/machinery/door/blast/shutters{ density = 0; @@ -4575,7 +4592,7 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lk" = ( /obj/machinery/door/blast/shutters{ density = 0; @@ -4594,22 +4611,22 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ll" = ( /obj/machinery/vending/boozeomat{ req_access = null }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lm" = ( /obj/structure/table/standard, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ln" = ( /obj/structure/table/standard, /obj/item/weapon/storage/toolbox/mechanical, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lo" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -4634,14 +4651,14 @@ /obj/item/weapon/contraband/poster, /obj/item/weapon/contraband/poster, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lq" = ( /obj/machinery/door/window/northleft{ name = "Cargo Hold"; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lr" = ( /obj/structure/table/steel_reinforced, /obj/random/plushie, @@ -4653,14 +4670,14 @@ dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ls" = ( /obj/machinery/door/window/northright{ name = "Cargo Hold"; req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lt" = ( /obj/structure/table/steel_reinforced, /obj/item/clothing/gloves/black, @@ -4679,20 +4696,20 @@ dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lu" = ( /obj/machinery/atmospherics/pipe/tank/air{ dir = 2; start_pressure = 740.5 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lv" = ( /obj/structure/closet/walllocker/emerglocker{ pixel_y = 32 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lw" = ( /obj/machinery/autolathe{ desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; @@ -4700,7 +4717,7 @@ name = "Unlocked Autolathe" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lx" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -4722,7 +4739,7 @@ req_access = list(160) }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lz" = ( /obj/structure/table/steel_reinforced, /obj/random/contraband, @@ -4733,23 +4750,23 @@ /obj/random/contraband, /obj/item/weapon/bikehorn, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lA" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lB" = ( /obj/effect/floor_decal/industrial/warning, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lC" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lD" = ( /obj/structure/table/steel_reinforced, /obj/item/clothing/head/bearpelt, @@ -4782,13 +4799,13 @@ /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/head/xenos, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lE" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/meter, /obj/structure/largecrate/animal/cat, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lF" = ( /obj/machinery/door/airlock/glass_engineering{ name = "Engineering"; @@ -4796,7 +4813,7 @@ req_one_access = newlist() }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lG" = ( /obj/structure/window/reinforced{ dir = 4 @@ -4817,7 +4834,7 @@ dir = 1 }, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lH" = ( /obj/machinery/vending/medical{ density = 0; @@ -4828,26 +4845,26 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "lI" = ( /obj/machinery/light{ dir = 1 }, /obj/structure/bookcase, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lJ" = ( /obj/structure/bed/chair/comfy/black, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lK" = ( /obj/structure/bed/chair/office/dark, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lL" = ( /obj/machinery/photocopier, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lM" = ( /obj/structure/table/steel_reinforced, /obj/random/action_figure, @@ -4857,7 +4874,7 @@ /obj/random/action_figure, /obj/random/action_figure, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lN" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/lipstick/black, @@ -4866,7 +4883,7 @@ /obj/item/weapon/lipstick, /obj/item/weapon/lipstick/random, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lO" = ( /obj/structure/table/steel_reinforced, /obj/item/clothing/accessory/holster/hip, @@ -4895,7 +4912,7 @@ /obj/item/clothing/accessory/medal/gold, /obj/item/clothing/accessory/medal/bronze_heart, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lP" = ( /obj/structure/table/steel_reinforced, /obj/item/clothing/under/cheongsam, @@ -4925,7 +4942,7 @@ /obj/item/clothing/under/dress/dress_orange, /obj/item/clothing/under/dress/maid/janitor, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lQ" = ( /obj/structure/table/steel_reinforced, /obj/item/clothing/suit/hgpirate, @@ -4938,7 +4955,7 @@ /obj/item/clothing/suit/justice, /obj/item/clothing/suit/pirate, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lR" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/structure/closet/crate/solar, @@ -4948,7 +4965,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lS" = ( /obj/structure/window/reinforced{ dir = 4 @@ -4967,7 +4984,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lT" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters"; @@ -4975,7 +4992,7 @@ req_one_access = newlist() }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lU" = ( /obj/structure/table/woodentable, /obj/item/weapon/paper_bin{ @@ -4986,16 +5003,16 @@ pixel_y = 4 }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lV" = ( /obj/structure/table/woodentable, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lW" = ( /obj/structure/table/woodentable, /obj/item/modular_computer/laptop/preset/custom_loadout/standard, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lX" = ( /obj/structure/window/reinforced{ dir = 1 @@ -5014,7 +5031,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lY" = ( /obj/structure/window/reinforced{ dir = 1 @@ -5030,7 +5047,7 @@ /obj/structure/grille, /obj/structure/window/reinforced, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "lZ" = ( /obj/structure/window/reinforced{ dir = 1 @@ -5049,7 +5066,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/shuttle/plating, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ma" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 @@ -5059,7 +5076,7 @@ }, /obj/machinery/meter, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mb" = ( /obj/machinery/access_button{ command = "cycle_interior"; @@ -5073,13 +5090,13 @@ dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mc" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "md" = ( /obj/structure/table/standard, /obj/item/clothing/suit/space/void/merc, @@ -5092,7 +5109,7 @@ /obj/item/clothing/head/helmet/space/void/merc, /obj/item/clothing/head/helmet/space/void/merc, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "me" = ( /obj/structure/table/standard, /obj/item/stack/cable_coil, @@ -5101,7 +5118,7 @@ /obj/item/clothing/gloves/yellow, /obj/item/clothing/gloves/yellow, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mf" = ( /obj/structure/table/standard, /obj/item/stack/material/steel{ @@ -5117,39 +5134,39 @@ amount = 15 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mg" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/captain, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mh" = ( /obj/structure/table/glass, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -35 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mi" = ( /obj/structure/filingcabinet/filingcabinet, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mj" = ( /obj/machinery/light, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mk" = ( /obj/structure/bed/chair/comfy/black{ dir = 1 }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ml" = ( /obj/structure/flora/pottedplant{ icon_state = "plant-10" }, /turf/simulated/floor/carpet, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mm" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/door/airlock/glass_external{ @@ -5160,7 +5177,7 @@ name = "Ship Hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mn" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1331; @@ -5171,15 +5188,15 @@ }, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mo" = ( /obj/machinery/vending/engivend, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mp" = ( /obj/machinery/vending/tool, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mq" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 1; @@ -5197,7 +5214,7 @@ tag_interior_door = "trade2_shuttle_inner" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mr" = ( /obj/machinery/light/small{ dir = 4; @@ -5214,7 +5231,7 @@ id_tag = "trade2_vent" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "ms" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1331; @@ -5224,7 +5241,7 @@ name = "Ship Hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mt" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -5241,7 +5258,7 @@ name = "Ship Hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "mu" = ( /obj/effect/transit/light{ dir = 8 @@ -6418,7 +6435,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "pa" = ( @@ -6470,7 +6487,7 @@ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "pg" = ( @@ -6507,7 +6524,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pj" = ( /obj/structure/bed/chair, /obj/machinery/light{ @@ -6516,7 +6533,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pk" = ( /turf/unsimulated/floor{ dir = 2; @@ -6620,7 +6637,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ps" = ( /obj/machinery/atmospherics/pipe/tank/air{ dir = 4; @@ -6628,7 +6645,7 @@ }, /obj/machinery/door/window, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pt" = ( /obj/machinery/shower{ dir = 8; @@ -6640,7 +6657,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pu" = ( /obj/structure/table/rack, /obj/item/weapon/gun/energy/sniperrifle, @@ -6775,7 +6792,7 @@ name = "Skipjack Blast Shielding" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "pI" = ( /obj/machinery/door/airlock/vault{ name = "War Armory"; @@ -6806,7 +6823,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "pM" = ( @@ -6814,7 +6831,7 @@ dir = 9 }, /turf/simulated/shuttle/floor/white, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pN" = ( /obj/machinery/embedded_controller/radio/airlock/phoron{ id_tag = "merc_south_airlock"; @@ -6822,7 +6839,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pO" = ( /obj/machinery/access_button/airlock_exterior{ command = "cycle_interior"; @@ -6840,7 +6857,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pP" = ( /obj/machinery/door/airlock/glass_external/public{ frequency = 1379; @@ -6851,7 +6868,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pQ" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -6867,7 +6884,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "pS" = ( /obj/structure/table/rack, /obj/item/weapon/cell/device/weapon, @@ -7022,7 +7039,7 @@ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qe" = ( @@ -7034,7 +7051,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qf" = ( @@ -7047,7 +7064,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "qg" = ( /obj/effect/floor_decal/corner/purple{ dir = 5 @@ -7103,7 +7120,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "qk" = ( /obj/effect/floor_decal/corner/red{ dir = 6 @@ -7299,7 +7316,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "qy" = ( /obj/structure/table/rack, /obj/item/ammo_magazine/m45/rubber, @@ -7400,7 +7417,7 @@ pixel_y = 16 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qG" = ( @@ -7414,7 +7431,7 @@ }, /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qH" = ( @@ -7423,7 +7440,7 @@ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qI" = ( @@ -7444,7 +7461,7 @@ pixel_y = 16 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qJ" = ( @@ -7453,7 +7470,7 @@ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qK" = ( @@ -7464,7 +7481,7 @@ dir = 1 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "qL" = ( /obj/effect/floor_decal/corner/yellow{ dir = 6 @@ -7583,12 +7600,12 @@ name = "\improper Landcrawler Scrubber" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qW" = ( /turf/simulated/shuttle/floor/black, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "qX" = ( @@ -7801,12 +7818,12 @@ "rm" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/shuttle/floor/black, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "rn" = ( /turf/simulated/shuttle/floor/black, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "ro" = ( @@ -7817,8 +7834,15 @@ locked = 1; name = "Shuttle Hatch" }, +/obj/effect/shuttle_landmark{ + base_area = /area/antag/antag_base; + base_turf = /turf/unsimulated/floor/steel; + docking_controller = "antag_ground_dock"; + landmark_tag = "antag_ground_base"; + name = "Home Base" + }, /turf/simulated/shuttle/floor/black, -/area/shuttle/antag_ground/base{ +/area/shuttle/antag_ground{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "rp" = ( @@ -7829,8 +7853,15 @@ locked = 1; name = "Shuttle Hatch" }, +/obj/effect/shuttle_landmark{ + base_area = /area/antag/antag_base; + base_turf = /turf/unsimulated/floor/steel; + docking_controller = "antag_space_dock"; + landmark_tag = "antag_space_base"; + name = "Home Base" + }, /turf/simulated/shuttle/floor/black, -/area/shuttle/antag_space/base{ +/area/shuttle/antag_space{ base_turf = /turf/unsimulated/floor/techfloor_grid }) "rq" = ( @@ -8068,7 +8099,7 @@ scrub_id = "merc_south_airlock_scrubber" }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "rI" = ( /obj/structure/table/rack, /obj/item/weapon/storage/box/handcuffs{ @@ -8182,7 +8213,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "rP" = ( /obj/structure/table/rack, /obj/item/weapon/storage/box/syndie_kit/combat_armor, @@ -8381,7 +8412,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sa" = ( /obj/machinery/door/airlock/glass_external{ density = 1; @@ -8406,7 +8437,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sb" = ( /obj/structure/table/rack, /obj/effect/floor_decal/borderfloorblack{ @@ -8473,11 +8504,11 @@ "se" = ( /obj/structure/symbol/da, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sf" = ( /obj/structure/symbol/lo, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sg" = ( /obj/structure/closet{ name = "custodial" @@ -8490,7 +8521,7 @@ }, /obj/item/clothing/gloves/yellow, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sh" = ( /obj/structure/sink{ dir = 8; @@ -8499,7 +8530,7 @@ pixel_y = 8 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "si" = ( /obj/machinery/door/window{ dir = 4; @@ -8673,14 +8704,14 @@ /obj/machinery/meter, /obj/effect/floor_decal/rust, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sv" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sw" = ( /obj/structure/toilet{ dir = 4 @@ -8810,7 +8841,7 @@ req_one_access = list(150) }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sH" = ( /obj/structure/table/reinforced, /obj/item/weapon/storage/belt/utility/full, @@ -8818,7 +8849,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sI" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 4 @@ -8957,13 +8988,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sT" = ( /obj/machinery/atmospherics/pipe/manifold/visible, /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "sU" = ( /obj/effect/floor_decal/borderfloorblack, /obj/machinery/recharger/wallcharger{ @@ -9050,7 +9081,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "tb" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -9058,7 +9089,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "tc" = ( /turf/unsimulated/floor{ icon_state = "freezerfloor"; @@ -9084,7 +9115,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "te" = ( /obj/structure/toilet, /turf/unsimulated/floor{ @@ -9327,7 +9358,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "tF" = ( /obj/machinery/shower{ dir = 1 @@ -9378,7 +9409,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "tJ" = ( /obj/structure/table/reinforced, /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{ @@ -9597,7 +9628,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ui" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/storage/firstaid/adv{ @@ -9606,7 +9637,7 @@ }, /obj/item/weapon/storage/firstaid/combat, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "uj" = ( /obj/structure/closet, /obj/item/weapon/reagent_containers/food/snacks/tastybread, @@ -9621,23 +9652,23 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uk" = ( /obj/structure/mopbucket, /turf/simulated/floor/plating, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ul" = ( /obj/machinery/door/airlock/glass, /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "um" = ( /obj/machinery/door/airlock/multi_tile/glass, /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "un" = ( /obj/structure/closet/syndicate, /obj/item/clothing/mask/gas/wwii, @@ -9654,7 +9685,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uo" = ( /obj/structure/bed/chair{ dir = 8 @@ -9668,7 +9699,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "up" = ( /obj/machinery/door/airlock/multi_tile/metal{ dir = 1; @@ -9677,7 +9708,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uq" = ( /obj/machinery/door/airlock/multi_tile/glass{ dir = 1 @@ -9685,7 +9716,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ur" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -9705,25 +9736,25 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "us" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hos, /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ut" = ( /obj/structure/sign/department/armory, /turf/simulated/shuttle/wall/dark, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uu" = ( /obj/structure/table/rack, /obj/effect/floor_decal/industrial/outline/grey, /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uv" = ( /obj/structure/table/rack, /obj/item/weapon/paper{ @@ -9734,7 +9765,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uw" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -9743,7 +9774,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "ux" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -9752,7 +9783,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uy" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 @@ -9760,13 +9791,13 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uz" = ( /obj/effect/floor_decal/industrial/warning, /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uA" = ( /obj/item/device/aicard, /obj/item/weapon/plastique, @@ -9776,7 +9807,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uB" = ( /obj/effect/floor_decal/corner_steel_grid{ dir = 10 @@ -9798,7 +9829,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_dred" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uC" = ( /obj/machinery/light{ dir = 8; @@ -9809,7 +9840,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_yellow" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uD" = ( /obj/structure/bed/chair{ dir = 1 @@ -9822,7 +9853,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uE" = ( /obj/structure/bed/chair{ dir = 1 @@ -9833,7 +9864,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uF" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -9859,7 +9890,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uH" = ( /obj/machinery/washing_machine, /obj/machinery/light{ @@ -9868,7 +9899,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uI" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hos, @@ -9880,7 +9911,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uJ" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hos, @@ -9890,7 +9921,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uK" = ( /obj/structure/toilet{ dir = 4 @@ -9901,7 +9932,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uL" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -9923,7 +9954,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_white" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uM" = ( /obj/structure/closet/secure_closet/medical_wall{ pixel_x = 0; @@ -9946,7 +9977,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uN" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; @@ -9965,7 +9996,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uO" = ( /obj/machinery/light{ dir = 8; @@ -9975,7 +10006,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uP" = ( /obj/item/weapon/storage/box/frags, /obj/structure/table/reinforced, @@ -9987,7 +10018,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_black" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uQ" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -10002,7 +10033,7 @@ /turf/simulated/shuttle/floor{ icon_state = "floor_red" }, -/area/syndicate_station/start) +/area/shuttle/mercenary) "uU" = ( /obj/item/weapon/tray{ pixel_y = 5 @@ -10040,7 +10071,7 @@ dir = 1 }, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "vs" = ( /obj/effect/floor_decal/asteroid, /turf/unsimulated/floor{ @@ -10068,7 +10099,18 @@ dir = 8 }, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"vB" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/obj/structure/railing{ + icon_state = "railing0"; + dir = 4 + }, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "vC" = ( /obj/machinery/light{ dir = 4; @@ -10077,7 +10119,7 @@ }, /obj/machinery/computer/security, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "vG" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -10092,7 +10134,7 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "vI" = ( /obj/effect/landmark{ name = "voxstart" @@ -10107,12 +10149,12 @@ /obj/item/weapon/grenade/flashbang, /obj/item/weapon/grenade/spawnergrenade/manhacks, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "vX" = ( /obj/item/weapon/bedsheet/clown, /obj/structure/bed/padded, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "vY" = ( /obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; @@ -10128,7 +10170,7 @@ req_access = list(150) }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "vZ" = ( /obj/machinery/door/airlock/hatch{ req_access = list(150) @@ -10145,7 +10187,7 @@ /obj/structure/table/steel_reinforced, /obj/machinery/cell_charger, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "wb" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -10165,16 +10207,16 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/ninja_dojo/start) +/area/shuttle/ninja) "we" = ( /obj/machinery/light/small{ dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) "wi" = ( /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "wj" = ( /obj/structure/toilet, /turf/unsimulated/floor{ @@ -10182,6 +10224,15 @@ dir = 2 }, /area/skipjack_station) +"wn" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 1; + icon_state = "sofaend_left"; + sofa_material = "black" + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "wq" = ( /obj/structure/undies_wardrobe, /turf/unsimulated/floor{ @@ -10203,7 +10254,7 @@ req_access = list(150) }, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "wA" = ( /obj/structure/table/bench/wooden, /turf/unsimulated/floor{ @@ -10218,18 +10269,18 @@ }, /obj/structure/bed/padded, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "wQ" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion"; dir = 1 }, /turf/simulated/shuttle/plating/airless/carry, -/area/ninja_dojo/start) +/area/shuttle/ninja) "wS" = ( /obj/item/robot_parts/l_leg, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "wU" = ( /obj/machinery/suit_cycler/syndicate{ locked = 0 @@ -10257,13 +10308,16 @@ /area/skipjack_station) "xt" = ( /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"xz" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "xD" = ( /obj/structure/flight_left{ dir = 1 }, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "xG" = ( /obj/structure/window/reinforced{ dir = 4 @@ -10272,6 +10326,17 @@ icon_state = "steel" }, /area/skipjack_station) +"xJ" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "xL" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -10287,7 +10352,7 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "xQ" = ( /obj/machinery/computer/shuttle_control/web/ninja{ dir = 1; @@ -10295,7 +10360,7 @@ icon_state = "flightcomp_center" }, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "xR" = ( /obj/effect/decal/cleanable/cobweb2{ icon_state = "spiderling"; @@ -10322,7 +10387,7 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "xW" = ( /obj/structure/window/reinforced{ dir = 4; @@ -10361,10 +10426,21 @@ icon_state = "wood" }, /area/ninja_dojo/dojo) +"yj" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 1 + }, +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "yl" = ( /obj/machinery/teleport/station, /turf/simulated/shuttle/plating, -/area/ninja_dojo/start) +/area/shuttle/ninja) "yv" = ( /obj/item/broken_device, /turf/unsimulated/floor{ @@ -10388,7 +10464,7 @@ start_pressure = 740 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "yD" = ( /turf/unsimulated/floor{ icon = 'icons/turf/flooring/wood.dmi'; @@ -10400,7 +10476,7 @@ dir = 8 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "yL" = ( /obj/item/weapon/storage/box, /turf/unsimulated/floor{ @@ -10415,13 +10491,42 @@ name = "snow" }, /area/ninja_dojo/dojo) +"yS" = ( +/obj/structure/bed/chair/bay/shuttle{ + icon_state = "shuttle_chair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"yY" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 8 + }, +/obj/structure/railing, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "zb" = ( /obj/structure/table/steel_reinforced, /obj/machinery/recharger{ pixel_y = 0 }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) +"zc" = ( +/obj/machinery/mech_recharger{ + icon = 'icons/turf/shuttle_alien_blue.dmi' + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"zl" = ( +/obj/structure/prop/alien/computer/hybrid, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "zn" = ( /obj/structure/table/rack, /obj/item/weapon/gun/launcher/crossbow, @@ -10438,12 +10543,12 @@ /obj/item/weapon/beartrap, /obj/item/weapon/beartrap, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "zs" = ( /obj/item/weapon/bedsheet/rd, /obj/structure/bed/padded, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "zv" = ( /obj/effect/wingrille_spawn/reinforced, /turf/unsimulated/floor{ @@ -10460,7 +10565,11 @@ "zL" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"zS" = ( +/obj/machinery/door/airlock/alien/blue, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "zT" = ( /obj/machinery/door/airlock{ icon = 'icons/obj/doors/Dooruranium.dmi' @@ -10477,7 +10586,7 @@ /obj/item/weapon/storage/firstaid/clotting, /obj/item/stack/medical/splint, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ac" = ( /obj/structure/closet/crate, /obj/random/tech_supply, @@ -10507,6 +10616,14 @@ }, /turf/space, /area/space) +"Ah" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Ai" = ( /obj/machinery/light/small{ dir = 8 @@ -10515,10 +10632,10 @@ dir = 1 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ak" = ( /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) "At" = ( /obj/machinery/sleep_console, /turf/unsimulated/floor{ @@ -10529,7 +10646,7 @@ /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Aw" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -10545,7 +10662,7 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ax" = ( /turf/unsimulated/beach/coastline{ density = 1; @@ -10588,7 +10705,7 @@ /turf/simulated/shuttle/plating/airless/carry{ dir = 1 }, -/area/supply/dock) +/area/shuttle/supply) "AN" = ( /obj/item/weapon/gun/launcher/pneumatic, /turf/unsimulated/floor{ @@ -10637,7 +10754,17 @@ /obj/random/multiple/voidsuit, /obj/random/energy, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Bb" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Bd" = ( /turf/unsimulated/floor{ icon_state = "steel_dirty" @@ -10667,7 +10794,7 @@ "Bi" = ( /obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Bj" = ( /obj/machinery/door/airlock/hatch{ frequency = 1331; @@ -10677,7 +10804,7 @@ req_access = list(150) }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Bk" = ( /obj/item/weapon/gun/energy/plasmastun, /turf/unsimulated/floor{ @@ -10685,12 +10812,52 @@ name = "plating" }, /area/skipjack_station) +"Bm" = ( +/obj/structure/bed/chair/sofa/right{ + sofa_material = "black" + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Bo" = ( /obj/machinery/bodyscanner{ dir = 8 }, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Bq" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/obj/structure/table/alien/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Bs" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/obj/structure/bed/chair/bay/shuttle{ + icon_state = "shuttle_chair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Bv" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "Bw" = ( /turf/unsimulated/beach/water, /area/beach) @@ -10713,6 +10880,9 @@ icon_state = "wood" }, /area/ninja_dojo/dojo) +"BF" = ( +/turf/simulated/shuttle/wall/alien/blue/hard_corner, +/area/shuttle/blue_fo) "BH" = ( /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ frequency = 1331; @@ -10731,7 +10901,7 @@ }, /obj/machinery/light/small, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "BN" = ( /obj/structure/table/steel, /obj/machinery/recharger, @@ -10739,20 +10909,37 @@ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "BP" = ( /obj/structure/shuttle/engine/propulsion{ dir = 4 }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/trade/centcom) +/area/shuttle/trade) +"BR" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"BZ" = ( +/obj/effect/map_effect/perma_light/brighter, +/obj/item/device/perfect_tele_beacon/stationary{ + icon_state = "beacon"; + tele_name = "Hybrid Shuttle"; + tele_network = "hybridshuttle" + }, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Cf" = ( /obj/structure/toilet{ dir = 4 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Cg" = ( /obj/machinery/airlock_sensor{ frequency = 1331; @@ -10760,7 +10947,7 @@ pixel_x = 25 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ch" = ( /obj/structure/toilet{ dir = 4 @@ -10777,7 +10964,7 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "Cj" = ( /obj/structure/table/glass, /obj/item/clothing/mask/balaclava, @@ -10805,16 +10992,44 @@ dir = 2 }, /area/ninja_dojo/dojo) +"Ct" = ( +/obj/machinery/sleep_console, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Cu" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) +"Cv" = ( +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/weapon/tank/emergency/oxygen/engi, +/obj/item/weapon/tank/emergency/oxygen/engi, +/obj/item/weapon/tank/emergency/oxygen/engi, +/obj/item/weapon/tank/emergency/oxygen/engi, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/obj/structure/closet/emcloset/legacy, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "CE" = ( /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "CG" = ( /obj/structure/flora/tree/pine, /turf/unsimulated/floor{ @@ -10831,6 +11046,17 @@ icon_state = "cult" }, /area/skipjack_station) +"CL" = ( +/turf/simulated/shuttle/wall/alien/blue, +/area/shuttle/blue_fo) +"Da" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor_dred" + }, +/area/shuttle/mercenary) "Db" = ( /obj/machinery/airlock_sensor{ frequency = 1331; @@ -10839,7 +11065,7 @@ pixel_y = 28 }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Dd" = ( /obj/effect/floor_decal/carpet, /turf/unsimulated/floor{ @@ -10860,6 +11086,13 @@ dir = 2 }, /area/ninja_dojo/dojo) +"Dh" = ( +/obj/structure/fans/hardlight, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/floor/alienplating/blue/half{ + dir = 8 + }, +/area/shuttle/blue_fo) "Dk" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/hop, @@ -10867,6 +11100,13 @@ icon_state = "wood" }, /area/skipjack_station) +"Do" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "Dw" = ( /obj/structure/table/standard, /obj/item/weapon/reagent_containers/food/snacks/chips, @@ -10880,7 +11120,7 @@ pixel_y = 2 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "DC" = ( /obj/structure/table/steel_reinforced, /obj/item/rig_module/chem_dispenser/ninja, @@ -10891,7 +11131,7 @@ "DF" = ( /obj/item/device/suit_cooling_unit, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "DK" = ( /obj/structure/table/rack, /obj/item/clothing/suit/space/vox/carapace, @@ -10903,6 +11143,10 @@ name = "plating" }, /area/skipjack_station) +"DL" = ( +/obj/structure/table/alien/blue, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "DM" = ( /obj/structure/kitchenspike, /turf/unsimulated/floor{ @@ -10912,7 +11156,15 @@ "DO" = ( /obj/structure/flight_left, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"DT" = ( +/obj/machinery/computer/shuttle_control/web/excursion/blue, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"DW" = ( +/obj/structure/flight_right, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "DZ" = ( /obj/machinery/gibber, /turf/unsimulated/floor{ @@ -10927,7 +11179,18 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Ek" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 8 + }, +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "Eo" = ( /obj/structure/closet/crate, /obj/item/clothing/gloves/vox, @@ -10963,7 +11226,7 @@ }, /obj/machinery/body_scanconsole, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ev" = ( /obj/structure/table/rack, /obj/item/clothing/glasses/thermal/plain/monocle, @@ -10979,6 +11242,14 @@ icon_state = "white" }, /area/ninja_dojo/dojo) +"Ez" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 + }, +/obj/structure/table/alien/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "EA" = ( /turf/unsimulated/floor{ icon_state = "plating"; @@ -10990,7 +11261,7 @@ req_access = list(150) }, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "EH" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/blue, @@ -10998,12 +11269,20 @@ icon_state = "wood" }, /area/skipjack_station) +"EJ" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 5 + }, +/obj/structure/bed/chair/bay/shuttle, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "EN" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "EU" = ( /obj/item/weapon/ore, /turf/unsimulated/floor{ @@ -11016,6 +11295,10 @@ icon_state = "cult" }, /area/skipjack_station) +"EY" = ( +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "EZ" = ( /turf/unsimulated/floor{ icon_state = "asteroid" @@ -11057,7 +11340,7 @@ "FE" = ( /obj/structure/flight_right, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "FF" = ( /obj/structure/sink{ icon_state = "sink"; @@ -11105,7 +11388,7 @@ }, /obj/machinery/meter, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "FQ" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet, @@ -11136,7 +11419,7 @@ icon = 'icons/obj/computer.dmi' }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Gi" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -11156,14 +11439,30 @@ opacity = 0 }, /turf/simulated/shuttle/plating, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Gk" = ( /obj/structure/table/steel, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Gq" = ( /turf/unsimulated/wall, /area/beach) +"Gv" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/obj/structure/table/alien/blue, +/obj/item/device/perfect_tele/alien/bluefo{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/device/perfect_tele/alien/bluefo{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Gw" = ( /obj/effect/overlay/palmtree_l, /turf/unsimulated/beach/sand, @@ -11181,7 +11480,7 @@ dir = 1 }, /turf/simulated/shuttle/plating/airless, -/area/skipjack_station/start) +/area/shuttle/skipjack) "He" = ( /obj/effect/floor_decal/carpet{ dir = 8 @@ -11208,7 +11507,23 @@ /obj/structure/table/rack, /obj/random/rigsuit, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Hi" = ( +/obj/structure/table/alien/blue, +/obj/item/device/perfect_tele/alien/bluefo{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/device/perfect_tele/alien/bluefo{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Hl" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Hm" = ( /obj/item/weapon/ore, /turf/unsimulated/floor{ @@ -11223,6 +11538,17 @@ icon_state = "wood" }, /area/ninja_dojo/dojo) +"Hs" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 4 + }, +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "HD" = ( /obj/structure/table/steel_reinforced, /obj/machinery/cell_charger, @@ -11238,7 +11564,7 @@ /obj/item/weapon/surgical/FixOVein, /obj/item/stack/nanopaste, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "HL" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -11255,17 +11581,30 @@ opacity = 0 }, /turf/simulated/shuttle/plating, -/area/ninja_dojo/start) +/area/shuttle/ninja) "HN" = ( /obj/structure/table/rack, /turf/unsimulated/floor{ icon_state = "asteroid" }, /area/skipjack_station) +"HO" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "HS" = ( /obj/item/robot_parts/head, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "HX" = ( /obj/machinery/recharger{ pixel_y = 0 @@ -11312,7 +11651,7 @@ /turf/simulated/shuttle/plating/airless/carry{ dir = 1 }, -/area/supply/dock) +/area/shuttle/supply) "Ir" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -11322,12 +11661,12 @@ start_pressure = 740.5 }, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Ix" = ( /obj/item/weapon/bedsheet/hos, /obj/structure/bed/padded, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Iy" = ( /obj/structure/closet/crate, /obj/item/clothing/under/vox/vox_casual, @@ -11364,7 +11703,7 @@ "IG" = ( /obj/structure/bed/chair/comfy/black, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "IL" = ( /obj/item/target/syndicate, /turf/unsimulated/floor{ @@ -11380,6 +11719,16 @@ icon_state = "steel" }, /area/skipjack_station) +"IO" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "trade_shuttle_bay"; + landmark_tag = "trade_cc"; + name = "Trader Station" + }, +/turf/simulated/shuttle/floor/black, +/area/shuttle/trade) "IP" = ( /obj/structure/table/glass, /obj/item/clothing/mask/balaclava/tactical{ @@ -11405,27 +11754,27 @@ pixel_x = -25 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "IW" = ( /obj/structure/table/standard, /obj/item/weapon/handcuffs/legcuffs, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Jc" = ( /turf/simulated/shuttle/wall/voidcraft/green, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Je" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; dir = 1 }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Jg" = ( /obj/item/weapon/bedsheet/rainbow, /obj/structure/bed/padded, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ji" = ( /obj/structure/table/steel_reinforced, /obj/item/rig_module/fabricator/energy_net, @@ -11488,7 +11837,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/stoxin, /obj/item/weapon/reagent_containers/syringe, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "JE" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -11498,6 +11847,13 @@ icon_state = "dark" }, /area/ninja_dojo/dojo) +"JF" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "JJ" = ( /obj/machinery/door/airlock/hatch{ req_access = list(150) @@ -11517,7 +11873,20 @@ req_access = list(150) }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"JN" = ( +/obj/effect/map_effect/perma_light/brighter, +/obj/structure/handrail{ + icon_state = "handrail"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"JR" = ( +/obj/structure/fans/hardlight, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/floor/alienplating/blue/half, +/area/shuttle/blue_fo) "JW" = ( /turf/unsimulated/beach/water{ density = 1; @@ -11526,7 +11895,7 @@ /area/beach) "JX" = ( /turf/simulated/wall/skipjack, -/area/skipjack_station/start) +/area/shuttle/skipjack) "JY" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/access_button{ @@ -11537,12 +11906,74 @@ req_one_access = list(150) }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Kb" = ( +/obj/structure/bed/chair/bay/shuttle{ + icon_state = "shuttle_chair_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Kc" = ( +/obj/machinery/door/airlock/alien/blue, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Kd" = ( +/obj/effect/map_effect/perma_light/brighter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Ke" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Kf" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/obj/structure/bed/chair/bay/shuttle{ + icon_state = "shuttle_chair_preview"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Kh" = ( /obj/item/weapon/bedsheet/orange, /obj/structure/bed/padded, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Kl" = ( +/obj/effect/map_effect/perma_light/brighter, +/obj/structure/bed/chair/bay/shuttle{ + icon_state = "shuttle_chair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"Kz" = ( +/turf/simulated/shuttle/wall/alien/blue{ + interior_corner = 1 + }, +/area/shuttle/blue_fo) +"KD" = ( +/obj/machinery/door/airlock/alien/blue{ + frequency = 1380; + id_tag = "hybrid_shuttle_afts" + }, +/obj/structure/fans/hardlight, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "KH" = ( /obj/machinery/light{ dir = 8; @@ -11551,7 +11982,14 @@ }, /obj/machinery/computer/station_alert, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) +"KK" = ( +/obj/structure/bed/alien{ + icon = 'icons/obj/abductor_vr.dmi' + }, +/obj/item/weapon/bedsheet/blue, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "KL" = ( /obj/structure/table/rack, /obj/item/weapon/melee/energy/sword/pirate, @@ -11561,15 +11999,28 @@ /obj/item/weapon/pinpointer/shuttle/heist, /obj/item/weapon/pinpointer/shuttle/heist, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "KN" = ( /obj/machinery/computer/teleporter, /turf/simulated/shuttle/plating, -/area/ninja_dojo/start) +/area/shuttle/ninja) "KT" = ( /obj/machinery/washing_machine, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"KV" = ( +/obj/structure/shuttle/engine/propulsion, +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + landmark_tag = "supply_cc"; + name = "Centcom Supply Depot" + }, +/turf/space, +/turf/simulated/shuttle/plating/airless/carry{ + dir = 1 + }, +/area/shuttle/supply) "KX" = ( /obj/structure/window/reinforced{ dir = 4; @@ -11582,7 +12033,7 @@ "KZ" = ( /obj/machinery/vending/hydroseeds, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Lb" = ( /obj/structure/table/steel, /obj/item/device/radio/uplink, @@ -11597,11 +12048,19 @@ id_tag = "vox_east_vent" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Lm" = ( /obj/machinery/floodlight, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Lx" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 4 + }, +/obj/structure/railing, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) "Ly" = ( /obj/effect/floor_decal/carpet, /obj/effect/floor_decal/carpet{ @@ -11619,7 +12078,7 @@ /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/item/weapon/tank/nitrogen, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "LH" = ( /obj/machinery/shower{ dir = 1 @@ -11648,7 +12107,7 @@ /obj/item/weapon/beartrap, /obj/structure/table/steel, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "LN" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -11664,7 +12123,7 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "LQ" = ( /obj/structure/bed/chair{ dir = 8 @@ -11684,7 +12143,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "LY" = ( /obj/effect/floor_decal/carpet{ dir = 8 @@ -11703,6 +12162,19 @@ icon_state = "carpet" }, /area/skipjack_station) +"Mb" = ( +/obj/machinery/power/smes/buildable/hybrid, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"Me" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/table/alien/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Mg" = ( /turf/unsimulated/wall{ desc = "That looks like it doesn't open easily."; @@ -11712,13 +12184,19 @@ }, /area/skipjack_station) "Ml" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/ninja_dojo/dojo; + base_turf = /turf/unsimulated/floor; + landmark_tag = "ninja_base"; + name = "The Dojo" + }, /turf/simulated/shuttle/wall/voidcraft/blue, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Mq" = ( /obj/structure/table/standard, /obj/item/weapon/deck/cards, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ms" = ( /obj/item/xenos_claw, /obj/item/organ/internal/brain/vox, @@ -11749,7 +12227,7 @@ /obj/item/device/paicard, /obj/item/device/pda/syndicate, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "MO" = ( /obj/effect/decal/cleanable/blood, /turf/unsimulated/floor{ @@ -11771,7 +12249,12 @@ name = "Skipjack Blast Shielding" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"MU" = ( +/obj/effect/map_effect/perma_light/brighter, +/obj/structure/table/alien/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Ng" = ( /turf/unsimulated/floor{ icon = 'icons/turf/flooring/wood.dmi'; @@ -11789,6 +12272,14 @@ icon_state = "wood" }, /area/skipjack_station) +"Nl" = ( +/obj/effect/floor_decal/techfloor/orange/corner, +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "No" = ( /obj/item/weapon/beach_ball, /turf/unsimulated/beach/sand, @@ -11815,7 +12306,7 @@ opacity = 0 }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Nt" = ( /turf/unsimulated/beach/sand{ density = 1; @@ -11849,7 +12340,7 @@ dir = 8 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "NY" = ( /obj/structure/table/standard, /obj/item/weapon/storage/fancy/cigarettes, @@ -11863,7 +12354,15 @@ }, /obj/item/weapon/card/emag, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Ob" = ( +/obj/effect/floor_decal/techfloor/orange/corner, +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Od" = ( /obj/structure/sink{ dir = 4; @@ -11872,12 +12371,46 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Oj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + id = "skipjackshutters"; + name = "Skipjack Blast Shielding" + }, +/obj/structure/window/reinforced/full, +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = null; + landmark_tag = "skipjack_base"; + name = "The Hideaway" + }, +/turf/simulated/shuttle/plating, +/area/shuttle/skipjack) +"On" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange/corner, +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + landmark_tag = "bluefo_start"; + name = "Deepish Space" + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "Oo" = ( /obj/structure/shuttle/engine/propulsion, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ow" = ( /obj/structure/table/steel_reinforced, /obj/item/rig_module/mounted/energy_blade, @@ -11892,13 +12425,13 @@ }, /obj/structure/table/steel, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "OH" = ( /obj/structure/bed/chair{ dir = 1 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "OK" = ( /obj/effect/wingrille_spawn/reinforced, /turf/unsimulated/floor{ @@ -11917,11 +12450,11 @@ /obj/item/weapon/tool/crowbar, /obj/item/device/suit_cooling_unit, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "OZ" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Pi" = ( /obj/item/device/suit_cooling_unit, /turf/unsimulated/floor{ @@ -11949,7 +12482,7 @@ /obj/item/clothing/head/pirate, /obj/item/clothing/glasses/thermal/plain/monocle, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Pw" = ( /obj/structure/bed/chair{ dir = 8 @@ -11958,7 +12491,7 @@ dir = 4 }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "PI" = ( /turf/unsimulated/mineral, /area/ninja_dojo/dojo) @@ -11989,7 +12522,7 @@ req_one_access = list(150) }, /turf/simulated/wall/skipjack, -/area/skipjack_station/start) +/area/shuttle/skipjack) "PS" = ( /obj/item/weapon/tank/vox, /turf/unsimulated/floor{ @@ -11999,7 +12532,7 @@ "PX" = ( /obj/machinery/computer/station_alert, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "PY" = ( /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ tag_airpump = "vox_west_vent"; @@ -12018,7 +12551,7 @@ }, /obj/machinery/light/small, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Qb" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -12031,7 +12564,26 @@ }, /obj/structure/window/reinforced/full, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Ql" = ( +/obj/structure/bed/chair/sofa/right{ + dir = 1; + icon_state = "sofaend_right"; + sofa_material = "black" + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Qo" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) +"Qs" = ( +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "Qw" = ( /turf/unsimulated/wall{ icon = 'icons/obj/doors/Dooruranium.dmi'; @@ -12057,7 +12609,7 @@ /obj/item/robot_parts/r_leg, /obj/item/robot_parts/r_arm, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "QJ" = ( /obj/machinery/recharge_station, /turf/unsimulated/floor{ @@ -12069,7 +12621,7 @@ /obj/structure/table/steel, /obj/item/weapon/deck/cards, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "QU" = ( /turf/simulated/mineral, /area/ninja_dojo/dojo) @@ -12095,6 +12647,15 @@ icon_state = "cult" }, /area/skipjack_station) +"Rd" = ( +/obj/structure/prop/alien/pod/hybrid, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"Ri" = ( +/obj/machinery/sleep_console, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Rn" = ( /obj/item/weapon/storage/box/syndie_kit/spy, /turf/unsimulated/floor{ @@ -12121,7 +12682,11 @@ name = "Skipjack Blast Shielding" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"RE" = ( +/obj/structure/table/alien/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "RN" = ( /obj/structure/inflatable, /turf/unsimulated/floor{ @@ -12152,7 +12717,7 @@ /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/meter, /turf/simulated/shuttle/floor/voidcraft/light, -/area/ninja_dojo/start) +/area/shuttle/ninja) "St" = ( /obj/machinery/embedded_controller/radio/airlock/docking_port{ frequency = 1331; @@ -12172,7 +12737,7 @@ pixel_x = -25 }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Sv" = ( /obj/structure/table/standard, /obj/item/weapon/storage/firstaid/adv{ @@ -12199,7 +12764,7 @@ }, /obj/item/weapon/storage/firstaid/regular, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Sy" = ( /obj/machinery/button/remote/blast_door{ id = "skipjackshutters"; @@ -12207,7 +12772,35 @@ req_access = list(150) }, /turf/simulated/wall/skipjack, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"SA" = ( +/obj/structure/flight_left{ + icon = 'icons/obj/flight_computer_vr.dmi' + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"SB" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) +"SH" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 30 + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "SI" = ( /obj/structure/table/standard, /obj/item/weapon/storage/box/glasses/square{ @@ -12258,7 +12851,17 @@ name = "Skipjack Blast Shielding" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"SV" = ( +/obj/structure/bed/chair/sofa/left{ + sofa_material = "black" + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Te" = ( /obj/effect/floor_decal/carpet{ dir = 1 @@ -12286,6 +12889,13 @@ icon_state = "carpet" }, /area/skipjack_station) +"Tk" = ( +/obj/structure/fans/hardlight, +/obj/structure/window/reinforced/full, +/turf/simulated/shuttle/floor/alienplating/blue/half{ + dir = 4 + }, +/area/shuttle/blue_fo) "Tn" = ( /obj/structure/table/standard, /obj/item/clothing/under/color/rainbow, @@ -12317,6 +12927,17 @@ icon_state = "steel" }, /area/skipjack_station) +"TA" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 8 + }, +/obj/structure/bed/chair/bay/shuttle{ + icon_state = "shuttle_chair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "TF" = ( /obj/structure/bed/chair, /obj/effect/landmark{ @@ -12332,7 +12953,7 @@ /area/beach) "TL" = ( /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "TO" = ( /obj/structure/table/wooden_reinforced, /obj/item/weapon/flame/candle, @@ -12341,6 +12962,16 @@ icon_state = "wood" }, /area/ninja_dojo/dojo) +"Uc" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Ue" = ( /obj/item/weapon/ore, /turf/unsimulated/floor{ @@ -12358,7 +12989,7 @@ req_access = list(150) }, /turf/simulated/shuttle/floor/voidcraft/dark, -/area/ninja_dojo/start) +/area/shuttle/ninja) "Uq" = ( /obj/item/weapon/gun/energy/sonic, /turf/unsimulated/floor{ @@ -12375,7 +13006,7 @@ /area/skipjack_station) "UB" = ( /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "UK" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_r"; @@ -12383,7 +13014,7 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/trade/centcom) +/area/shuttle/trade) "UL" = ( /obj/structure/table/rack, /obj/item/weapon/storage/belt/utility/full, @@ -12392,7 +13023,7 @@ /obj/item/device/multitool, /obj/item/clothing/shoes/magboots, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "UO" = ( /obj/structure/table/standard, /obj/item/weapon/surgical/circular_saw{ @@ -12402,7 +13033,27 @@ /obj/item/weapon/surgical/scalpel, /obj/item/stack/medical/advanced/bruise_pack, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"UZ" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/obj/structure/railing{ + icon_state = "railing0"; + dir = 8 + }, +/turf/simulated/shuttle/floor/alien, +/area/shuttle/blue_fo) +"Vs" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/turf/simulated/shuttle/wall/alien/blue{ + interior_corner = 1 + }, +/area/shuttle/blue_fo) "Vx" = ( /turf/unsimulated/floor{ icon_state = "wood" @@ -12411,7 +13062,7 @@ "VA" = ( /obj/item/pizzabox/meat, /turf/simulated/shuttle/floor/red, -/area/skipjack_station/start) +/area/shuttle/skipjack) "VC" = ( /turf/unsimulated/beach/sand, /area/beach) @@ -12429,12 +13080,19 @@ icon_state = "wood" }, /area/ninja_dojo/dojo) +"VK" = ( +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "VT" = ( /obj/machinery/door/airlock/hatch{ req_access = list(150) }, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "VW" = ( /obj/structure/undies_wardrobe, /turf/unsimulated/floor{ @@ -12448,7 +13106,7 @@ dir = 4 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Wf" = ( /turf/unsimulated/wall, /area/skipjack_station) @@ -12470,7 +13128,7 @@ req_access = list(150) }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Wr" = ( /obj/machinery/door/airlock/hatch{ frequency = 1331; @@ -12481,7 +13139,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Ww" = ( /obj/structure/inflatable, /turf/unsimulated/floor{ @@ -12512,14 +13170,14 @@ req_access = list(150) }, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) "WM" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ frequency = 1331; id_tag = "vox_west_vent" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "WX" = ( /obj/structure/window/reinforced{ dir = 8 @@ -12538,12 +13196,24 @@ icon_state = "wood_broken2" }, /area/ninja_dojo/dojo) +"Xf" = ( +/obj/machinery/door/airlock/alien/blue, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor/orange{ + icon_state = "techfloororange_edges"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Xo" = ( /obj/structure/table/steel, /obj/item/clothing/glasses/regular, /obj/item/clothing/glasses/regular, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Xq" = ( /turf/unsimulated/floor{ icon_state = "freezerfloor"; @@ -12575,11 +13245,11 @@ /obj/item/weapon/tool/wrench, /obj/item/weapon/mop, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "XI" = ( /mob/living/simple_mob/animal/passive/tindalos, /turf/simulated/shuttle/floor/black, -/area/skipjack_station/start) +/area/shuttle/skipjack) "XL" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -12621,11 +13291,19 @@ }, /obj/random/multiple/voidsuit, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "XY" = ( /obj/structure/closet, /turf/unsimulated/beach/sand, /area/beach) +"Yb" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + icon_state = "techfloororange_corners"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/blue_fo) "Yd" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/green, @@ -12650,7 +13328,7 @@ /obj/random/multiple/voidsuit, /obj/random/energy, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Yi" = ( /turf/unsimulated/floor{ icon_state = "freezerfloor"; @@ -12665,7 +13343,7 @@ /turf/simulated/shuttle/plating/airless/carry{ dir = 1 }, -/area/supply/dock) +/area/shuttle/supply) "Yn" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -12680,7 +13358,7 @@ name = "Skipjack Blast Shielding" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Yp" = ( /obj/structure/table/wooden_reinforced, /obj/machinery/recharger{ @@ -12705,7 +13383,11 @@ name = "Skipjack Blast Shielding" }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) +"Yx" = ( +/obj/machinery/door/airlock/alien/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "Yz" = ( /obj/structure/table/steel_reinforced, /obj/item/weapon/storage/toolbox/syndicate{ @@ -12727,7 +13409,7 @@ /obj/machinery/teleport/hub, /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/shuttle/plating, -/area/ninja_dojo/start) +/area/shuttle/ninja) "YX" = ( /obj/machinery/light/small{ dir = 8 @@ -12737,7 +13419,7 @@ start_pressure = 740 }, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Za" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -12746,22 +13428,22 @@ req_access = list(150) }, /turf/simulated/wall/skipjack, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Zm" = ( /obj/machinery/optable, /turf/simulated/shuttle/floor/white, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Zo" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, /obj/machinery/meter, /turf/simulated/shuttle/plating, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Zu" = ( /obj/machinery/light/small, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "Zv" = ( /obj/item/weapon/ore, /obj/structure/reagent_dispensers/beerkeg, @@ -12769,12 +13451,30 @@ icon_state = "white" }, /area/skipjack_station) +"Zy" = ( +/obj/structure/table/alien/blue, +/obj/machinery/button/remote/airlock{ + name = "Aft Door Bolts"; + pixel_x = 6; + pixel_y = 2; + id = "hybrid_shuttle_afts"; + specialfunctions = 4 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + pixel_x = -6; + pixel_y = 0; + id_tag = "hybrid_shuttle_docker"; + frequency = 1380; + tag_door = "hybrid_shuttle_afts" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/blue_fo) "ZA" = ( /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "ZB" = ( /turf/simulated/shuttle/wall/voidcraft/hard_corner, -/area/ninja_dojo/start) +/area/shuttle/ninja) "ZI" = ( /obj/structure/table/rack, /obj/item/weapon/gun/energy/darkmatter, @@ -12818,7 +13518,7 @@ req_access = list(150) }, /turf/simulated/shuttle/floor/darkred, -/area/skipjack_station/start) +/area/shuttle/skipjack) "ZY" = ( /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" @@ -14410,7 +15110,7 @@ di bn bn dE -AJ +KV aq gp iE @@ -15648,7 +16348,7 @@ zv ap ap ap -Qb +Oj Ge OH ZA @@ -16685,7 +17385,7 @@ gC gC iy iD -jg +IO am jg jH @@ -25526,35 +26226,35 @@ mv mv mv mv -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp ap ap ap @@ -25696,7 +26396,7 @@ ap ap ap ap -ap +gp ap ap ap @@ -25838,7 +26538,7 @@ ap ap ap ap -ap +gp ap ap ap @@ -25980,7 +26680,7 @@ ap ap ap ap -ap +gp ap ap ap @@ -26122,7 +26822,7 @@ ap ap ap ap -ap +gp ap ap ap @@ -26264,7 +26964,7 @@ ap ap ap ap -ap +gp ap ap ap @@ -26406,7 +27106,7 @@ ap ap ap ap -ap +gp ap ap ap @@ -26529,6 +27229,18 @@ ap ap ap ap +CL +CL +BF +Dh +Dh +Dh +BF +CL +CL +KD +CL +CL ap ap ap @@ -26536,19 +27248,7 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -26670,27 +27370,27 @@ ap ap ap ap +CL +Kz +DL +CL +Uc +Ke +Bb +CL +ab +TA +Bv +Ke +Vs +CL ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -26812,27 +27512,27 @@ ap ap ap ap +CL +SA +Qs +CL +Ct +xz +Ri +CL +Bq +RE +xz +zc +Do +CL ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -26954,27 +27654,27 @@ ap ap ap ap +CL +DT +Kl +CL +BR +BZ +EY +CL +SH +Kd +xz +zc +vB +CL ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -27096,27 +27796,27 @@ ap ap ap ap +CL +DW +Qs +Yx +yj +xz +Ob +Xf +yj +xz +xz +xz +Yb +KD ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -27238,27 +27938,27 @@ ap ap ap ap +CL +DL +DL +CL +yY +xz +Ek +CL +Kf +Kb +Kb +xz +Me +JR ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -27380,27 +28080,27 @@ ap ap ap ap +CL +CL +CL +CL +CL +zS +CL +CL +Gv +Hi +Zy +Kd +Me +JR ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -27522,27 +28222,27 @@ ap ap ap ap +CL +Rd +KK +CL +Lx +xz +Hs +CL +Bs +yS +yS +xz +Me +JR ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap ap @@ -27664,27 +28364,27 @@ ap ap ap ap +CL +Cv +Qs +Yx +xJ +xz +Ob +Kc +xJ +xz +xz +xz +Nl +KD ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap aB @@ -27806,27 +28506,27 @@ ap ap ap ap +CL +HO +JN +CL +Bm +MU +wn +CL +zl +Kd +xz +Hl +UZ +CL ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap ap aB @@ -27948,27 +28648,27 @@ ap ap ap ap +CL +Mb +SB +CL +SV +RE +Ql +CL +BR +xz +xz +Hl +Do +CL ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap aB aB @@ -28090,27 +28790,27 @@ ap ap ap ap +CL +Kz +DL +CL +JF +Ah +VK +CL +EJ +Ez +On +Qo +Vs +CL ap ap ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap aB aB @@ -28233,6 +28933,18 @@ ap ap ap ap +CL +CL +BF +Tk +Tk +Tk +BF +CL +CL +KD +CL +CL ap ap ap @@ -28240,19 +28952,7 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp ap aB aB @@ -28394,7 +29094,7 @@ ap ap ap ap -ap +gp aB aB oX @@ -28536,7 +29236,7 @@ ap ap ap ap -ap +gp aB aB oX @@ -28677,8 +29377,8 @@ ap ap ap ap -ap -ap +gp +gp aB aB oX @@ -28819,7 +29519,7 @@ ap ap ap ap -ap +gp aB aB aB @@ -28961,7 +29661,7 @@ ap ap ap ap -ap +gp aB aB aB @@ -29103,7 +29803,7 @@ ap ap ap ap -ap +gp aB aB aB @@ -29218,34 +29918,34 @@ ap ap ap mv -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp +gp aB aB aB @@ -29424,7 +30124,7 @@ ay rX rZ ci -ci +Da cK tb dC @@ -29565,8 +30265,8 @@ rY qC rY sa -ci -ci +Da +Da cM tb dC @@ -29581,8 +30281,8 @@ dC dC uz pP -ci -ci +Da +Da uB ap ap @@ -30630,20 +31330,20 @@ hn hn ib ib +hn +hn +hn +hn +hn +hn ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip +hn +hn +hn +hn +hn +hn +hn lo lo hn @@ -30771,22 +31471,22 @@ ho ho ho ic -io -io -io -io -io -io -io -io -io -io -io -io -io -io -io -io +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho lx ho ho @@ -30913,22 +31613,22 @@ hn hn hn ib -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo hn hn @@ -31055,22 +31755,22 @@ hn hn hn ib -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo hn hn @@ -31197,22 +31897,22 @@ hn hn hn id -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo hn hn @@ -31339,22 +32039,22 @@ hn hn hn id -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo hn hn @@ -31481,22 +32181,22 @@ ho ho ho ie -io -io -io -io -io -io -io -io -io -io -io -io -io -io -io -io +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho lx ho ho @@ -31624,20 +32324,20 @@ hn hn id id -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip -ip +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo lo hn diff --git a/maps/tether/submaps/tether_ships.dmm b/maps/tether/submaps/tether_ships.dmm index d07caac6eb..3f209f234e 100644 --- a/maps/tether/submaps/tether_ships.dmm +++ b/maps/tether/submaps/tether_ships.dmm @@ -3,8 +3,14 @@ /turf/space, /area/space) "ab" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/transit/east; + landmark_tag = "belter_transit"; + name = "Belter Transit" + }, /turf/space/transit/east, -/area/shuttle/belter/transit) +/area/space) "ac" = ( /obj/effect/step_trigger/teleporter/random{ affect_ghosts = 1; @@ -29,26 +35,28 @@ "et" = ( /turf/space/bluespace, /area/space) -"eO" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 2; - name = "thrower_throwdown"; - stopper = 0; - tiles = 0 - }, -/turf/space/sandyscroll, -/area/space) "fg" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/bluespace; + landmark_tag = "tether_excursion_bluespace"; + name = "Excursion Bluespace Transit" + }, /turf/space/bluespace, -/area/shuttle/excursion/bluespace) +/area/space) "gO" = ( /obj/effect/step_trigger/teleporter/planetary_fall/virgo3b, /turf/simulated/sky/virgo3b/south, /area/space) "gP" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/simulated/sky/virgo3b/south; + landmark_tag = "tether_excursion_virgo3bsky"; + name = "Excursion Virgo3b Sky" + }, /turf/simulated/sky/virgo3b/south, -/area/shuttle/excursion/virgo3b_sky) +/area/space) "gT" = ( /turf/space/transit/east, /area/space) @@ -86,25 +94,57 @@ }, /area/space) "ha" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/transit/south; + landmark_tag = "antag_space_transit"; + name = "Proto Shuttle Transit" + }, /turf/space/transit/south, -/area/shuttle/antag_space/transit) +/area/space) "hb" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/unsimulated/floor/techfloor_grid; + flags = 0; + landmark_tag = "antag_ground_transit"; + name = "Secret Tunnel" + }, /turf/unsimulated/floor/techfloor_grid{ icon = 'icons/turf/transit_vr.dmi' }, -/area/shuttle/antag_ground/transit) +/area/space) "hc" = ( /turf/simulated/sky/virgo3b/south, /area/space) "hd" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/sandyscroll; + landmark_tag = "tether_excursion_transit_sand"; + name = "Excursion Sandy Transit" + }, /turf/space/sandyscroll, -/area/shuttle/excursion/sand_moving) +/area/space) "he" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = null; + landmark_tag = "tether_excursion_space"; + name = "Excursion Space" + }, /turf/space, -/area/shuttle/excursion/space) +/area/space) "hf" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/transit/east; + landmark_tag = "escapepod1_transit"; + name = "Escapepod 1 Transit" + }, /turf/space/transit/east, -/area/shuttle/large_escape_pod1/transit) +/area/space) "hh" = ( /obj/effect/floor_decal/transit/orange{ dir = 8 @@ -127,19 +167,15 @@ icon = 'icons/turf/transit_vr.dmi' }, /area/space) -"hj" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 2; - name = "thrower_throwdown"; - stopper = 0; - tiles = 0 - }, -/turf/space/bluespace, -/area/space) "hk" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/simulated/sky/virgo3b/south; + landmark_tag = "tether_backup_transit"; + name = "Tether Backup Transit" + }, /turf/simulated/sky/virgo3b/south, -/area/shuttle/tether/transit) +/area/space) "hn" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -163,8 +199,15 @@ /turf/space/transit/south, /area/space) "hq" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = null; + landmark_tag = "tether_excursion_transit_space"; + name = "Excursion Transit Space" + }, /turf/space/transit/south, -/area/shuttle/excursion/space_moving) +/area/space) "hr" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -228,16 +271,6 @@ }, /turf/space/transit/south, /area/space) -"hD" = ( -/obj/effect/step_trigger/thrower{ - affect_ghosts = 1; - direction = 2; - name = "thrower_throwdown"; - stopper = 0; - tiles = 0 - }, -/turf/space, -/area/space) "hG" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -287,14 +320,26 @@ /turf/space/transit/north, /area/space) "yn" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/transit/north; + landmark_tag = "ninja_transit"; + name = "Ninja Transit" + }, /turf/space/transit/north, -/area/ninja_dojo/transit) +/area/space) "HO" = ( /turf/space/transit/north, /area/space) "Js" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/transit/north; + landmark_tag = "skipjack_transit"; + name = "Skipjack Transit" + }, /turf/space/transit/north, -/area/skipjack_station/transit) +/area/space) "Nb" = ( /turf/space, /turf/space/transit/north, @@ -311,8 +356,14 @@ /turf/space/transit/north, /area/space) "TL" = ( +/obj/effect/shuttle_landmark/transit{ + base_area = /area/space; + base_turf = /turf/space/transit/east; + landmark_tag = "specops_transit"; + name = "Specops Transit" + }, /turf/space/transit/east, -/area/shuttle/specialops/transit) +/area/space) (1,1,1) = {" aa @@ -370,91 +421,91 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ "} (2,1,1) = {" aa @@ -512,39 +563,37 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ dJ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +aa +gV +gV gV gV gV @@ -596,7 +645,9 @@ ht ht ht ht -aa +ht +ht +dJ "} (3,1,1) = {" aa @@ -654,39 +705,35 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et @@ -711,6 +758,8 @@ et et et et +et +et gV dJ ht @@ -737,8 +786,10 @@ hp hp hp hp +hp +hp ht -aa +dJ "} (4,1,1) = {" aa @@ -796,39 +847,35 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et @@ -853,6 +900,8 @@ et et et et +et +et gV dJ ht @@ -879,8 +928,10 @@ hp hp hp hp +hp +hp ht -aa +dJ "} (5,1,1) = {" aa @@ -938,39 +989,35 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -gU -eO -eO -eO -eO -eO -eO -gU -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et @@ -985,12 +1032,14 @@ et et et et -hj -hj -hj -hj -hj -hj +et +et +et +et +et +et +et +et et et et @@ -1011,18 +1060,20 @@ hp hp hp hp -hz -hz -hz -hz -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp hp hp hp hp ht -aa +dJ "} (6,1,1) = {" aa @@ -1080,61 +1131,59 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -gU -eO -eO -eO -eO -eO -eO -eO -eO -eO -eO -eO -hd -hd -hd -hd -eO -eO -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et et et et -hj -hj -hj -hj -hj -hj -hj -hj -hj -hj -hj -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -1145,26 +1194,28 @@ hp hp hp hp -hz -hz -hz -hz -hz -hz -hz -hz -hz -hz -hz -hq -hq -hq -hq -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (7,1,1) = {" aa @@ -1222,61 +1273,59 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -1287,26 +1336,28 @@ hp hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (8,1,1) = {" aa @@ -1364,61 +1415,59 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -eO -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et et et -hj -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -1428,27 +1477,29 @@ hp hp hp hp -hz -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (9,1,1) = {" aa @@ -1506,61 +1557,59 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -1570,27 +1619,29 @@ hp hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (10,1,1) = {" aa @@ -1613,8 +1664,8 @@ SG SG SG SG -Js -Js +HO +HO SG SG HO @@ -1648,61 +1699,59 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -dQ -gU -gU -gU -eO -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -eO -gU -dQ dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa gV et et et -hj -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -1711,28 +1760,30 @@ ht hp hp hp -hz -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (11,1,1) = {" aa @@ -1745,19 +1796,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -1786,95 +1837,95 @@ aa aa aa aa -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dQ -gU -gU -gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -eO -gU -dQ -dJ -gV -et -et -et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj -et -et -gV -dJ -ht -hp -hp -hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz -hz -hp -ht aa +aa +aa +aa +dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ +aa +gV +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +gV +dJ +ht +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +ht +dJ "} (12,1,1) = {" aa @@ -1887,19 +1938,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -1928,65 +1979,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU gU dQ -dJ +aa gV et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -1995,28 +2044,30 @@ ht hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp hp ht -aa +dJ "} (13,1,1) = {" aa @@ -2029,19 +2080,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -2070,65 +2121,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU gU dQ -dJ +aa gV et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -2137,28 +2186,30 @@ ht hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp hp ht -aa +dJ "} (14,1,1) = {" aa @@ -2171,19 +2222,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG SG SG @@ -2212,65 +2263,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU gU dQ -dJ +aa gV et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -2279,28 +2328,30 @@ ht hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp hp ht -aa +dJ "} (15,1,1) = {" aa @@ -2317,19 +2368,19 @@ SG SG SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -2354,65 +2405,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU dQ -dJ +aa gV et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -2421,28 +2470,30 @@ ht hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (16,1,1) = {" aa @@ -2459,19 +2510,19 @@ HO SG SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG SG HO @@ -2496,65 +2547,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU -eO -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU dQ -dJ +aa gV et et et -hj -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -2563,28 +2612,30 @@ ht hp hp hp -hz -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (17,1,1) = {" aa @@ -2599,22 +2650,22 @@ HO SG SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG SG HO @@ -2638,65 +2689,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU gU -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU dQ -dJ +aa gV et et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -2706,27 +2755,29 @@ hp hp hp hp -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (18,1,1) = {" aa @@ -2739,25 +2790,25 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -2780,65 +2831,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU gU -eO -eO -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU dQ -dJ +aa gV et et et et -hj -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -2848,27 +2897,29 @@ hp hp hp hp -hz -hz -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (19,1,1) = {" aa @@ -2882,24 +2933,24 @@ HO HO SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -2922,67 +2973,65 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU gU gU -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -hd -eO +gU +gU +gU +gU +gU +gU gU dQ -dJ +aa gV et et et et et -hj -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg -fg +et +et +et +et +et +et +et +et +et +et +et +et fg et et +et +et +et +et +et gV dJ ht @@ -2991,26 +3040,28 @@ hp hp hp hp -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hq -hz +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (20,1,1) = {" aa @@ -3024,24 +3075,24 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -3064,65 +3115,63 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU gU gU gU -eO -eO -eO -eO -eO -eO -eO -eO -hd -hd gU gU gU -hd -hd -eO -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU dQ -dJ +aa gV et et et et et -hj -hj -hj -hj -hj -hj -hj -hj -fg -fg et et et -fg -fg -hj +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et et et gV @@ -3133,26 +3182,28 @@ hp hp hp hp -hz -hz -hz -hz -hz -hz -hz -hz -hq -hq hp hp hp -hq -hq -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp ht -aa +dJ "} (21,1,1) = {" aa @@ -3167,23 +3218,23 @@ HO HO SG Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -3206,17 +3257,11 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU @@ -3230,19 +3275,21 @@ gU gU gU gU -eO -eO -eO -eO -eO -eO -eO -eO -eO +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU gU gU dQ -dJ +aa gV et et @@ -3256,13 +3303,15 @@ et et et et -hj -hj -hj -hj -hj -hj -hj +et +et +et +et +et +et +et +et +et et et et @@ -3282,19 +3331,21 @@ hp hp hp hp -hz -hz -hz -hz -hz -hz -hz -hz -hz +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hp hp ht -aa +dJ "} (22,1,1) = {" aa @@ -3308,24 +3359,24 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -3348,17 +3399,11 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU @@ -3383,8 +3428,10 @@ gU gU gU gU +gU +gU dQ -dJ +aa gV et et @@ -3409,6 +3456,8 @@ et et et et +et +et gV dJ ht @@ -3435,8 +3484,10 @@ hp hp hp hp +hp +hp ht -aa +dJ "} (23,1,1) = {" aa @@ -3450,24 +3501,24 @@ HO HO SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -3490,17 +3541,11 @@ aa aa aa aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa dQ gU gU @@ -3525,8 +3570,10 @@ gU gU gU gU +gU +gU dQ -dJ +aa gV et et @@ -3551,6 +3598,8 @@ et et et et +et +et gV dJ ht @@ -3577,8 +3626,10 @@ hp hp hp hp +hp +hp ht -aa +dJ "} (24,1,1) = {" aa @@ -3591,25 +3642,25 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -3632,95 +3683,95 @@ aa aa aa aa +aa +aa +aa +aa dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dQ -dJ -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV -gV gV +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et gV dJ ht +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -ht -aa +dJ "} (25,1,1) = {" aa @@ -3735,22 +3786,22 @@ HO SG SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG SG HO @@ -3774,95 +3825,95 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa aa +dJ +dQ +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +gU +dQ aa +gV +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +et +gV dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +ht +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp +ht dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -aa "} (26,1,1) = {" aa @@ -3879,19 +3930,19 @@ HO SG SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG SG HO @@ -3916,95 +3967,95 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa aa dJ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ +dQ aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +gV +dJ +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht +ht dJ -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -aa "} (27,1,1) = {" aa @@ -4021,19 +4072,19 @@ SG SG SG SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -4058,95 +4109,95 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gO -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -gO dJ -hu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -hu -aa +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ "} (28,1,1) = {" aa @@ -4159,19 +4210,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG SG SG @@ -4200,7 +4251,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4227,68 +4284,62 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO gO dJ hu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa hu -aa +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +dJ "} (29,1,1) = {" aa @@ -4301,19 +4352,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -4342,7 +4393,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4369,16 +4426,6 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc @@ -4395,12 +4442,14 @@ hc hc hc hc -ho -ho -ho -ho -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc hc hc gO @@ -4421,16 +4470,18 @@ aa aa aa aa -hD -hD -hD -hD -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa aa aa hu -aa +dJ "} (30,1,1) = {" aa @@ -4443,19 +4494,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -4484,7 +4535,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4511,39 +4568,31 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc hc -ho -ho -ho -ho -ho -ho -ho -ho -ho -ho -ho -gP -gP -gP -gP -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -4553,26 +4602,28 @@ aa aa aa aa -hD -hD -hD -hD -hD -hD -hD -hD -hD -hD -hD -he -he -he -he -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (31,1,1) = {" aa @@ -4585,19 +4636,19 @@ HO HO HO SG -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js -Js +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -4626,7 +4677,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4653,39 +4710,31 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -4695,26 +4744,28 @@ aa aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (32,1,1) = {" aa @@ -4737,8 +4788,8 @@ SG SG SG SG -Js -Js +HO +HO SG SG HO @@ -4768,7 +4819,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4795,39 +4852,31 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc -ho -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -4836,27 +4885,29 @@ aa aa aa aa -hD -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (33,1,1) = {" aa @@ -4910,7 +4961,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -4937,39 +4994,31 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -4978,27 +5027,29 @@ aa aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (34,1,1) = {" aa @@ -5052,7 +5103,13 @@ aa aa aa aa -dJ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -5079,39 +5136,31 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc -ho -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -5119,28 +5168,30 @@ hu aa aa aa -hD -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (35,1,1) = {" aa @@ -5194,33 +5245,6 @@ aa aa aa aa -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ aa aa aa @@ -5231,29 +5255,54 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dJ gO hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -5261,28 +5310,30 @@ hu aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (36,1,1) = {" aa @@ -5362,39 +5413,37 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc hc gO @@ -5403,28 +5452,30 @@ hu aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa hu -aa +dJ "} (37,1,1) = {" aa @@ -5504,39 +5555,37 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc hc gO @@ -5545,28 +5594,30 @@ hu aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa hu -aa +dJ "} (38,1,1) = {" aa @@ -5646,39 +5697,37 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc hc gO @@ -5687,28 +5736,30 @@ hu aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa hu -aa +dJ "} (39,1,1) = {" aa @@ -5788,40 +5839,38 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -5829,28 +5878,30 @@ hu aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (40,1,1) = {" aa @@ -5930,40 +5981,38 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc -ho -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -5971,28 +6020,30 @@ hu aa aa aa -hD -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (41,1,1) = {" aa @@ -6072,40 +6123,38 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -6114,27 +6163,29 @@ aa aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (42,1,1) = {" aa @@ -6214,40 +6265,38 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc -ho -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -6256,27 +6305,29 @@ aa aa aa aa -hD -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (43,1,1) = {" aa @@ -6356,40 +6407,38 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc hc -ho -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -gP -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -6399,26 +6448,28 @@ aa aa aa aa -hD -he -he -he -he -he -he -he -he -he -he -he -he -he -he -he -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (44,1,1) = {" aa @@ -6498,40 +6549,38 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc hc hc hc -ho -ho -ho -ho -ho -ho -ho -ho -gP -gP hc hc hc -gP -gP -ho -ho +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc hc gO dJ @@ -6541,26 +6590,28 @@ aa aa aa aa -hD -hD -hD -hD -hD -hD -hD -hD -he -he aa aa aa -he -he -hD -hD +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa hu -aa +dJ "} (45,1,1) = {" aa @@ -6640,17 +6691,13 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc @@ -6664,15 +6711,17 @@ hc hc hc hc -ho -ho -ho -ho -ho -ho -ho -ho -ho +hc +hc +hc +hc +hc +gP +hc +hc +hc +hc +hc hc hc gO @@ -6690,19 +6739,21 @@ aa aa aa aa -hD -hD -hD -hD -hD -hD -hD -hD -hD +aa +aa +aa +aa +aa +he +aa +aa +aa +aa +aa aa aa hu -aa +dJ "} (46,1,1) = {" aa @@ -6782,17 +6833,13 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc @@ -6817,6 +6864,8 @@ hc hc hc hc +hc +hc gO dJ hu @@ -6843,8 +6892,10 @@ aa aa aa aa -hu aa +aa +hu +dJ "} (47,1,1) = {" aa @@ -6924,17 +6975,13 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa gO hc hc @@ -6959,6 +7006,8 @@ hc hc hc hc +hc +hc gO dJ hu @@ -6985,8 +7034,10 @@ aa aa aa aa -hu aa +aa +hu +dJ "} (48,1,1) = {" aa @@ -7066,69 +7117,69 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO -gO gO +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc gO dJ hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu -hu aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +hu +dJ "} (49,1,1) = {" aa @@ -7208,52 +7259,6 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -7261,6 +7266,35 @@ aa aa aa dJ +gO +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +gO +dJ +hu aa aa aa @@ -7271,6 +7305,23 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +hu +dJ "} (50,1,1) = {" aa @@ -7350,52 +7401,6 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -7403,6 +7408,35 @@ aa aa aa dJ +gO +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +gO +dJ +hu aa aa aa @@ -7413,6 +7447,23 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +hu +dJ "} (51,1,1) = {" aa @@ -7492,52 +7543,6 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -7545,6 +7550,35 @@ aa aa aa dJ +gO +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +hc +gO +dJ +hu aa aa aa @@ -7555,6 +7589,23 @@ aa aa aa aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +hu +dJ "} (52,1,1) = {" aa @@ -7634,52 +7685,6 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -7687,16 +7692,62 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +gO +dJ +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +hu +dJ "} (53,1,1) = {" aa @@ -7776,52 +7827,6 @@ aa aa aa aa -dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -7829,16 +7834,62 @@ aa aa aa dJ -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ +dJ "} (54,1,1) = {" aa @@ -7918,7 +7969,6 @@ aa aa aa aa -dJ aa aa aa @@ -7970,7 +8020,8 @@ aa aa aa aa -dJ +aa +aa aa aa aa @@ -8060,7 +8111,6 @@ aa aa aa aa -dJ aa aa aa @@ -8112,7 +8162,8 @@ aa aa aa aa -dJ +aa +aa aa aa aa @@ -8202,7 +8253,6 @@ aa aa aa aa -dJ aa aa aa @@ -8254,7 +8304,8 @@ aa aa aa aa -dJ +aa +aa aa aa aa @@ -8344,7 +8395,6 @@ aa aa aa aa -dJ aa aa aa @@ -8396,7 +8446,8 @@ aa aa aa aa -dJ +aa +aa aa aa aa @@ -8486,7 +8537,6 @@ aa aa aa aa -dJ aa aa aa @@ -8538,7 +8588,8 @@ aa aa aa aa -dJ +aa +aa aa aa aa @@ -8628,59 +8679,59 @@ aa aa aa aa -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ -dJ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -10924,11 +10975,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -10948,11 +10999,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11066,11 +11117,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11090,11 +11141,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11184,11 +11235,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -11208,11 +11259,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11232,11 +11283,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11326,11 +11377,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -11350,11 +11401,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11374,11 +11425,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11468,11 +11519,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -11492,11 +11543,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11516,11 +11567,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11610,11 +11661,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -11634,11 +11685,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11658,11 +11709,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11752,11 +11803,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -11776,11 +11827,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11800,11 +11851,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -11894,11 +11945,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -11918,11 +11969,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -11942,11 +11993,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -12036,11 +12087,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -12060,11 +12111,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -12084,11 +12135,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -12178,11 +12229,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -12202,11 +12253,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -12226,11 +12277,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -12320,11 +12371,11 @@ gT gT gT hG -ab -ab -ab -ab -ab +gT +gT +gT +gT +gT hG gT gT @@ -12344,11 +12395,11 @@ gT gT gT hG -TL -TL -TL -TL -TL +gT +gT +gT +gT +gT hG gT gT @@ -12368,11 +12419,11 @@ gT gT gT hG -hf -hf -hf -hf -hf +gT +gT +gT +gT +gT hG gT gT @@ -12463,9 +12514,9 @@ gT gT hG hH +gT ab -ab -ab +gT hI hG gT @@ -12487,9 +12538,9 @@ gT gT hG hH +gT TL -TL -TL +gT hI hG gT @@ -12511,9 +12562,9 @@ gT gT hG hH +gT hf -hf -hf +gT hI hG gT @@ -15205,13 +15256,13 @@ gO hc hc hn -hk -hk -hk -hk -hk -hk -hk +hc +hc +hc +hc +hc +hc +hc ho hc hc @@ -15347,13 +15398,13 @@ gO hc hc hn +hc +hc +hc hk -hk -hk -hk -hk -hk -hk +hc +hc +hc ho hc hc @@ -15489,13 +15540,13 @@ gO hc hc hn -hk -hk -hk -hk -hk -hk -hk +hc +hc +hc +hc +hc +hc +hc ho hc hc @@ -15631,13 +15682,13 @@ gO hc hc hr -hk -hk -hk -hk -hk -hk -hk +hc +hc +hc +hc +hc +hc +hc ho hc hc @@ -15773,13 +15824,13 @@ gO hc hc hr -hk -hk -hk -hk -hk -hk -hk +hc +hc +hc +hc +hc +hc +hc ho hc hc @@ -17757,16 +17808,16 @@ ac aa hw hp -ha -ha -ha -ha -ha -ha -ha -ha -ha -ha +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hz hp hp @@ -17899,16 +17950,16 @@ ac aa hw hp -ha -ha -ha -ha -ha -ha -ha -ha -ha -ha +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hz hp hp @@ -18023,10 +18074,10 @@ HO HO SG SG -yn -yn -yn -yn +HO +HO +HO +HO SG SG HO @@ -18041,15 +18092,15 @@ ac aa hw hp -ha -ha -ha -ha -ha -ha -ha -ha -ha +hp +hp +hp +hp +hp +hp +hp +hp +hp ha hz hp @@ -18164,12 +18215,12 @@ HO HO HO SG -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO SG SG HO @@ -18183,16 +18234,16 @@ ac aa hw hp -ha -ha -ha -ha -ha -ha -ha -ha -ha -ha +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hz hp hp @@ -18306,13 +18357,13 @@ SG SG SG SG -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO SG SG HO @@ -18325,16 +18376,16 @@ ac aa hw hp -ha -ha -ha -ha -ha -ha -ha -ha -ha -ha +hp +hp +hp +hp +hp +hp +hp +hp +hp +hp hz hp hp @@ -18444,18 +18495,18 @@ kd HO HO SG -yn -yn -yn -yn -yn -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -18589,15 +18640,15 @@ SG SG SG SG -yn -yn -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -18732,14 +18783,14 @@ HO HO SG yn -yn -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -18873,15 +18924,15 @@ SG SG SG SG -yn -yn -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -19012,18 +19063,18 @@ kd HO HO SG -yn -yn -yn -yn -yn -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO +HO SG HO HO @@ -19158,13 +19209,13 @@ SG SG SG SG -yn -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO +HO SG SG HO @@ -19177,16 +19228,16 @@ ac aa hx gY -hb -hb -hb -hb -hb -hb -hb -hb -hb -hb +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY gY gY gY @@ -19300,12 +19351,12 @@ HO HO HO SG -yn -yn -yn -yn -yn -yn +HO +HO +HO +HO +HO +HO SG SG HO @@ -19319,16 +19370,16 @@ ac aa hx gY -hb -hb -hb -hb -hb -hb -hb -hb -hb -hb +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY gY gY gY @@ -19443,10 +19494,10 @@ HO HO SG SG -yn -yn -yn -yn +HO +HO +HO +HO SG SG HO @@ -19461,15 +19512,15 @@ ac aa hx gY -hb -hb -hb -hb -hb -hb -hb -hb -hb +gY +gY +gY +gY +gY +gY +gY +gY +gY hb gY gY @@ -19603,16 +19654,16 @@ ac aa hx gY -hb -hb -hb -hb -hb -hb -hb -hb -hb -hb +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY gY gY gY @@ -19745,16 +19796,16 @@ ac aa hx gY -hb -hb -hb -hb -hb -hb -hb -hb -hb -hb +gY +gY +gY +gY +gY +gY +gY +gY +gY +gY gY gY gY diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index 88e8d640dd..57914a2efb 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -12348,16 +12348,16 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/tram) -"auW" = ( -/turf/simulated/floor/maglev, -/area/shuttle/escape/station{ - base_turf = /turf/simulated/floor/tiled/techfloor/grid - }) "auX" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether/surfacebase/tram; + base_turf = /turf/simulated/floor/tiled/techfloor/grid; + docking_controller = null; + landmark_tag = "escape_station"; + name = "Tether Surface Base" + }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/escape/station{ - base_turf = /turf/simulated/floor/tiled/techfloor/grid - }) +/area/tether/surfacebase/tram) "auY" = ( /obj/structure/cable/green{ d1 = 1; @@ -49293,20 +49293,20 @@ atz aud aud aud +aud +aud +aud +aud +aud +aud auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX +aud +aud +aud +aud +aud +aud +aud aud aud atz @@ -49434,22 +49434,22 @@ aad atA aue aue -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue aue atA aad @@ -49576,22 +49576,22 @@ aad atB aud aud -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud aud atB aad @@ -49718,22 +49718,22 @@ aad atB aud aud -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud aud atB aad @@ -49860,22 +49860,22 @@ aad atB aud aud -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud aud atB aad @@ -50002,22 +50002,22 @@ aad atB aud aud -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud aud atB aad @@ -50144,22 +50144,22 @@ aad atA aue aue -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW -auW +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue +aue aue atA aad @@ -50287,20 +50287,20 @@ atz aud aud aud -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX -auX +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud +aud aud aud atz diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 54cf45093d..cfb8df4872 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -23768,12 +23768,12 @@ /area/tether/surfacebase/shuttle_pad) "aME" = ( /turf/simulated/shuttle/wall, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aMF" = ( /obj/structure/shuttle/window, /obj/structure/grille, /turf/simulated/shuttle/plating/airless, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aMG" = ( /obj/structure/railing{ dir = 4 @@ -23972,15 +23972,15 @@ "aMZ" = ( /obj/structure/closet/firecloset, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNa" = ( /obj/machinery/computer/shuttle_control/tether_backup, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNb" = ( /obj/structure/closet/emcloset, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNc" = ( /obj/machinery/alarm{ dir = 8; @@ -24075,10 +24075,10 @@ dir = 4 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNl" = ( /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNm" = ( /obj/structure/bed/chair/shuttle{ dir = 8 @@ -24091,7 +24091,7 @@ tag_door = "tether_shuttle_hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNn" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -24229,7 +24229,7 @@ name = "Shuttle Hatch" }, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNA" = ( /obj/machinery/power/apc{ dir = 4; @@ -24322,13 +24322,13 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNK" = ( /obj/structure/bed/chair/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor/black, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNL" = ( /obj/structure/window/basic/full, /obj/structure/grille, @@ -24359,7 +24359,7 @@ dir = 1 }, /turf/simulated/shuttle/plating/airless, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aNQ" = ( /obj/machinery/firealarm{ dir = 4; @@ -27962,7 +27962,7 @@ /obj/structure/shuttle/engine/propulsion, /turf/simulated/floor/reinforced, /turf/simulated/shuttle/plating/carry, -/area/shuttle/tether/surface) +/area/shuttle/tether) "aUx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -31728,6 +31728,16 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"uSA" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/tether/surfacebase/shuttle_pad; + base_turf = /turf/simulated/floor/reinforced; + docking_controller = "tether_pad_airlock"; + landmark_tag = "tether_backup_low"; + name = "Surface Hangar" + }, +/turf/simulated/shuttle/floor/black, +/area/shuttle/tether) (1,1,1) = {" aaa @@ -45595,7 +45605,7 @@ aKU aMF aMZ aNk -aNl +uSA aNJ aNP aUw diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 51735d4d78..b3a3a0c714 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -38,8 +38,15 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/backup) "aaf" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = null; + landmark_tag = "tether_excursion_nearby"; + name = "Nearby Tether" + }, /turf/space, -/area/shuttle/excursion/tether_nearby) +/area/space) "aag" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'RADIOACTIVE AREA'"; @@ -2819,19 +2826,21 @@ /turf/simulated/floor/tiled/dark, /area/gateway/prep_room) "afc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/door/airlock/command{ + name = "Secondary Command Office" }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 }, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) "afd" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -3267,17 +3276,15 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "afH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) "afI" = ( /turf/simulated/wall, /area/tether/station/visitorhallway/office) @@ -3430,42 +3437,32 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "afV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/turf/simulated/wall/r_wall, +/area/maintenance/substation/spacecommand) "afW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "afX" = ( @@ -3636,31 +3633,32 @@ /turf/simulated/floor/plating, /area/tether/station/visitorhallway/office) "agl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/common, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "agm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/borderfloor{ + dir = 8 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) "agn" = ( /turf/simulated/floor/tiled, /area/bridge/secondary) @@ -3717,25 +3715,46 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "agr" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/engi{ + name = "Asteroid Command Substation"; + req_one_access = list(10,19) }, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "ags" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 4 }, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) "agt" = ( /obj/machinery/light{ dir = 4 @@ -3807,30 +3826,17 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "agx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) -"agy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/effect/floor_decal/borderfloor{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/corner/blue/border{ dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 }, /obj/structure/cable/green{ d1 = 1; @@ -3838,7 +3844,19 @@ icon_state = "1-2" }, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) +"agy" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "agz" = ( /obj/effect/floor_decal/techfloor{ dir = 6 @@ -3854,34 +3872,78 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "agA" = ( -/obj/machinery/door/airlock/command{ - name = "Secondary Command Office" +/obj/effect/floor_decal/borderfloor{ + dir = 4 }, -/obj/machinery/door/firedoor/glass, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 8; - icon_state = "pdoor0"; - id = "secondary_bridge_blast"; - name = "Secondary Command Office Blast Doors"; - opacity = 0 +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 }, /obj/structure/cable/green{ - d1 = 1; d2 = 2; - icon_state = "1-2" + icon_state = "0-2" }, /turf/simulated/floor/tiled, /area/bridge/secondary) "agB" = ( -/obj/effect/floor_decal/borderfloor/corner{ +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/corner/blue/bordercorner{ +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) +"agC" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 0 + }, +/obj/effect/floor_decal/borderfloor{ dir = 8 }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, /obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/bridge/secondary) +"agD" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -3889,17 +3951,6 @@ }, /turf/simulated/floor/tiled, /area/bridge/secondary) -"agC" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"agD" = ( -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) "agE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4279,15 +4330,15 @@ /turf/simulated/floor, /area/maintenance/station/eng_lower) "ahg" = ( -/obj/structure/table/rack{ - dir = 8; - layer = 2.9 +/obj/machinery/power/breakerbox/activated{ + RCon_tag = "Secondary Command Substation Bypass" + }, +/obj/machinery/light/small{ + dir = 8; + pixel_y = 0 }, -/obj/random/maintenance/clean, -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/area/maintenance/substation/spacecommand) "ahh" = ( /obj/structure/cable/green{ d1 = 1; @@ -4317,26 +4368,20 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "ahj" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ +/obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2" + icon_state = "1-2"; + pixel_y = 0 }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) +/obj/machinery/camera/network/engineering{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "ahk" = ( /obj/structure/table/reinforced, /obj/machinery/photocopier/faxmachine{ @@ -4403,26 +4448,27 @@ /turf/simulated/floor/plating, /area/bridge/secondary) "ahn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/border{ dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 + dir = 6 }, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 }, -/obj/effect/floor_decal/corner/lightgrey/bordercorner2{ - dir = 9 +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) "aho" = ( /obj/machinery/light/small, /turf/simulated/floor, @@ -4439,6 +4485,11 @@ /turf/simulated/floor, /area/maintenance/station/eng_lower) "ahr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -4462,24 +4513,16 @@ /turf/simulated/floor/plating, /area/engineering/engine_airlock) "aht" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/borderfloor/corner2, -/obj/effect/floor_decal/corner/lightgrey/bordercorner2, /turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/area/bridge/secondary) "ahu" = ( /obj/machinery/computer/transhuman/resleeving{ dir = 8 @@ -4639,10 +4682,14 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "ahI" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/rust, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "ahJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment{ @@ -4666,24 +4713,14 @@ /turf/simulated/floor/tiled, /area/engineering/engine_airlock) "ahL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/machinery/camera/network/tether{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "ahM" = ( /obj/structure/cable/green{ d1 = 1; @@ -4712,8 +4749,17 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "ahN" = ( -/turf/simulated/wall/r_wall, -/area/bridge/secondary/meeting_room) +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "ahO" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 @@ -4849,8 +4895,19 @@ /turf/simulated/floor/tiled, /area/engineering/engine_monitoring) "aia" = ( -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/machinery/power/smes/buildable{ + charge = 0; + output_attempt = 0; + outputting = 0; + RCon_tag = "Substation - Secondary Command" + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "aib" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4954,6 +5011,11 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "ain" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -4967,11 +5029,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 2 - }, /obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aio" = ( @@ -4982,6 +5042,11 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aip" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -4989,84 +5054,18 @@ dir = 4 }, /obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/door/firedoor/glass/hidden/steel{ dir = 1 }, -/obj/effect/floor_decal/corner/lightgrey/border, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aiq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/machinery/computer/id_restorer{ - dir = 1; - icon_state = "restorer"; - pixel_y = -32 - }, -/obj/effect/floor_decal/corner/lightgrey/border, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) -"air" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) -"ais" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) -"ait" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border, -/turf/simulated/floor/tiled, -/area/hallway/station/atrium) -"aiu" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -5085,6 +5084,43 @@ }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) +"air" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) +"ais" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) +"ait" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) +"aiu" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "aiv" = ( /obj/structure/table/woodentable, /obj/item/weapon/folder/yellow, @@ -5106,13 +5142,14 @@ /turf/simulated/floor/tiled, /area/bridge/secondary) "aix" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/structure/table/rack{ + dir = 8; + layer = 2.9 }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) +/obj/random/maintenance/clean, +/obj/random/junk, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "aiy" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10 @@ -5142,11 +5179,25 @@ /turf/simulated/floor/carpet/bcarpet, /area/tether/station/visitorhallway/office) "aiB" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/common, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -28; + pixel_y = 0 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "aiC" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -5182,9 +5233,9 @@ /turf/simulated/floor/tiled, /area/engineering/engine_airlock) "aiE" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "aiF" = ( /obj/machinery/power/apc{ dir = 4; @@ -5227,18 +5278,30 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "aiH" = ( -/obj/machinery/keycard_auth{ - pixel_x = -24 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "aiI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "aiJ" = ( /obj/machinery/gateway, /obj/effect/floor_decal/industrial/warning, @@ -6628,8 +6691,21 @@ /turf/simulated/floor/tiled, /area/tether/station/stairs_one) "aln" = ( -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "alo" = ( /obj/structure/table/standard, /obj/machinery/light{ @@ -7439,8 +7515,15 @@ /turf/simulated/floor/grass, /area/hallway/station/atrium) "amK" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "specops_dock"; + landmark_tag = "specops_tether"; + name = "Tether Docking Arm" + }, /turf/space, -/area/shuttle/specialops/tether) +/area/space) "amL" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -9262,12 +9345,25 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/backup) "aqg" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/tether/station/visitorhallway) "aqh" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ icon_state = "intact"; @@ -9473,29 +9569,30 @@ /turf/simulated/wall, /area/maintenance/abandonedlibraryconference) "aqx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/effect/floor_decal/borderfloor{ - dir = 4 + dir = 6 }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 4 +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 6 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 10 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/lightgrey/bordercorner2, /turf/simulated/floor/tiled, -/area/bridge/secondary) +/area/tether/station/visitorhallway) "aqy" = ( /obj/structure/table, /obj/effect/decal/cleanable/cobweb, @@ -10512,13 +10609,19 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "asB" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/book/manual/security_space_law, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/common, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/tether/station/visitorhallway) "asC" = ( /obj/structure/table/woodentable, /obj/item/device/flashlight/lamp/green{ @@ -10552,14 +10655,18 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "asG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/wall/r_wall, +/area/maintenance/abandonedlibraryconference) "asH" = ( -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 +/obj/structure/disposalpipe/sortjunction{ + name = "Visitor Office"; + sortType = "Visitor Office" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, /turf/simulated/floor, /area/maintenance/station/spacecommandmaint) @@ -10603,30 +10710,15 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "asM" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/machinery/power/apc{ + dir = 2; + name = "south bump"; + pixel_y = -28; + req_access = list(67) }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/camera/network/command{ - icon_state = "camera"; - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) +/obj/structure/cable, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "asN" = ( /obj/machinery/cryopod, /obj/effect/floor_decal/corner_techfloor_grid{ @@ -10684,42 +10776,58 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/workshop) "asV" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/bridge/secondary) +/area/hallway/station/atrium) "asW" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/structure/cable/green, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Secondary Command Subgrid"; + name_tag = "Secondary Command Subgrid" + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 1 + }, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "asX" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/folder/red, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/random/junk, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "asY" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -10741,15 +10849,24 @@ /turf/simulated/floor/carpet/bcarpet, /area/tether/station/visitorhallway/office) "ata" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/bordercorner{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/blue/bordercorner2{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /turf/simulated/floor/tiled, /area/bridge/secondary) @@ -10760,13 +10877,29 @@ /turf/simulated/floor, /area/maintenance/substation/engineering) "atc" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/space_heater, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "atd" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, @@ -11015,32 +11148,8 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "atz" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) +/turf/simulated/wall/r_wall, +/area/maintenance/station/spacecommandmaint) "atA" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -11202,11 +11311,27 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/office) "atM" = ( -/obj/structure/closet/crate, -/obj/random/tool, -/obj/random/tool, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "atN" = ( /obj/effect/decal/cleanable/blood/oil/streak{ amount = 0 @@ -11217,43 +11342,28 @@ /turf/simulated/wall/r_wall, /area/engineering/engine_eva) "atP" = ( -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -28; - pixel_y = 0 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 +/obj/machinery/door/airlock/maintenance/engi{ + name = "Asteroid Command Substation"; + req_one_access = list(19) }, /obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor, +/area/maintenance/substation/spacecommand) "atQ" = ( /obj/structure/window/reinforced, /obj/structure/frame, /turf/simulated/floor/tiled, /area/engineering/workshop) "atR" = ( -/obj/structure/bed/chair/office/dark, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/door/firedoor/glass, +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "secondary_bridge" }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/plating, /area/bridge/secondary) "atS" = ( /obj/machinery/hologram/holopad, @@ -11339,12 +11449,20 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "aub" = ( -/obj/structure/bed/chair/comfy/blue{ - icon_state = "comfychair_preview"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/machinery/door/airlock/command{ + name = "Secondary Command Office" + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary) "auc" = ( /obj/structure/table/reinforced, /obj/effect/floor_decal/corner/white/diagonal, @@ -11387,37 +11505,27 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aui" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/obj/structure/cable/green{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) +"auj" = ( +/obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) -"auj" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/bridge/secondary) +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "auk" = ( /obj/structure/stairs/west, /turf/simulated/floor/tiled, @@ -11468,30 +11576,28 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "aup" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/command, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/station/visitorhallway) +/turf/simulated/floor, +/area/bridge/secondary/hallway) "auq" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -11518,35 +11624,13 @@ /turf/simulated/wall, /area/crew_quarters/sleep/cryo) "aut" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2, -/obj/effect/floor_decal/corner/lightgrey/bordercorner2, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/tether/station/visitorhallway) +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "auu" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -11654,24 +11738,24 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/office) "auD" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/common, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 }, -/turf/simulated/floor, -/area/tether/station/visitorhallway) +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "auE" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -11693,55 +11777,131 @@ /turf/simulated/floor/plating, /area/bridge/secondary) "auF" = ( -/obj/structure/disposalpipe/sortjunction{ - name = "Visitor Office"; - sortType = "Visitor Office" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/machinery/light{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, /obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/effect/floor_decal/corner/blue/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "auG" = ( -/obj/machinery/door/airlock/maintenance/common, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"auH" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 5 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) -"auI" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "intact-supply"; - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "intact-scrubbers"; dir = 4 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/blue/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) +"auH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/blue/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) +"auI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/blue/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "auJ" = ( /obj/structure/table/standard, /obj/random/tech_supply, @@ -11763,15 +11923,38 @@ /turf/simulated/floor/tiled, /area/storage/tools) "auK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "Space Meeting Room"; + sortType = "Space Meeting Room" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/blue/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "auL" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -11785,39 +11968,60 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/office) "auM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + icon_state = "borderfloor"; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/blue/border{ + icon_state = "bordercolor"; + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/blue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) +"auN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) -"auN" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/folder/yellow{ - pixel_x = 2 - }, -/obj/item/weapon/folder/blue{ - pixel_y = 3 - }, -/obj/item/weapon/folder/red{ - pixel_x = -2 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "auO" = ( /obj/machinery/vending/fitness, /obj/machinery/light{ @@ -11903,16 +12107,24 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/office) "auV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/effect/floor_decal/borderfloor{ + dir = 5 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "auW" = ( /obj/machinery/atmospherics/omni/mixer{ tag_east = 1; @@ -11965,12 +12177,8 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "avb" = ( -/obj/machinery/keycard_auth{ - pixel_x = 24 - }, -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/wall/r_wall, +/area/bridge/secondary/hallway) "avc" = ( /obj/machinery/cryopod/robot, /obj/effect/floor_decal/corner_techfloor_grid{ @@ -12028,11 +12236,23 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "avi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/blue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "avj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -12049,12 +12269,23 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "avl" = ( -/obj/effect/floor_decal/rust, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "avm" = ( /obj/structure/cable/green{ d1 = 1; @@ -12101,22 +12332,16 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "avr" = ( +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 10 + }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/blue/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/blue/bordercorner2{ - dir = 9 - }, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/blue/bordercorner2, /turf/simulated/floor/tiled, -/area/bridge/secondary) +/area/bridge/secondary/hallway) "avs" = ( /obj/structure/table/reinforced, /obj/item/device/suit_cooling_unit, @@ -12161,11 +12386,16 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/office) "avv" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 +/obj/machinery/power/apc{ + dir = 2; + name = "south bump"; + pixel_y = -28 }, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/structure/cable/green, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "avw" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/red{ icon_state = "map"; @@ -12533,18 +12763,10 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/station/docks) "avY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "avZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12607,10 +12829,17 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "awe" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/box/cups, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/effect/landmark{ + name = "lightsout" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "awf" = ( /obj/structure/cable/green{ d1 = 4; @@ -12631,8 +12860,20 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "awg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/blue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) +"awh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -12644,23 +12885,8 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /turf/simulated/floor/tiled, -/area/bridge/secondary) -"awh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/area/bridge/secondary/hallway) "awi" = ( /obj/structure/cable/green{ d1 = 4; @@ -12845,33 +13071,31 @@ /turf/simulated/floor/tiled/dark, /area/bridge/secondary) "awy" = ( -/obj/structure/reagent_dispensers/water_cooler/full, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/blue/bordercorner2, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "awz" = ( -/obj/structure/bed/chair/comfy/blue{ - icon_state = "comfychair_preview"; - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/machinery/light, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "awA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/effect/floor_decal/borderfloor{ + dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/corner/blue/border{ + dir = 6 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled, +/area/bridge/secondary/hallway) "awB" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 1 @@ -12895,8 +13119,8 @@ /turf/simulated/floor/tiled/techmaint, /area/engineering/workshop) "awC" = ( -/turf/simulated/floor/wood/broken, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/wall/r_wall, +/area/bridge/secondary/teleporter) "awD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/red{ icon_state = "intact"; @@ -13024,9 +13248,21 @@ }, /area/engineering/hallway) "awN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood/broken, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/command{ + name = "Teleport Access"; + req_access = newlist(); + req_one_access = list(17) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "awO" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 @@ -13079,10 +13315,8 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "awQ" = ( -/obj/structure/table/woodentable, -/obj/item/glass_jar, -/turf/simulated/floor/wood, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/wall/r_wall, +/area/bridge/meeting_room) "awR" = ( /obj/structure/cable/green{ d1 = 1; @@ -13094,10 +13328,20 @@ /turf/simulated/floor/wood, /area/engineering/break_room) "awS" = ( -/obj/structure/bed/chair/comfy/black, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/command{ + name = "Secondary Command Office" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "awT" = ( /obj/structure/table/reinforced, /obj/item/weapon/storage/box/donkpockets{ @@ -13118,54 +13362,52 @@ /turf/simulated/floor/tiled, /area/storage/tools) "awV" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/grille, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "SecondaryCommandShutter"; - layer = 3.3; - name = "Privacy Shutters" - }, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/plating, -/area/bridge/secondary/meeting_room) +/obj/machinery/suit_storage_unit/standard_unit, +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "awW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 4; + icon_state = "1-4" }, -/obj/machinery/door/airlock/command{ - name = "Secondary Command Office" +/obj/machinery/light_switch{ + dir = 2; + name = "light switch "; + pixel_x = 20; + pixel_y = 30 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/bridge/secondary/meeting_room) +/area/bridge/secondary/teleporter) "awX" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/structure/window/reinforced, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 8; - icon_state = "pdoor0"; - id = "secondary_bridge_blast"; - name = "Secondary Command Office Blast Doors"; - opacity = 0 +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 4 }, -/turf/simulated/floor/plating, -/area/bridge/secondary/meeting_room) +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "awY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/random/junk, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "awZ" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 @@ -13219,21 +13461,29 @@ /turf/simulated/floor/plating, /area/hallway/station/docks) "axc" = ( +/obj/structure/bed/chair/comfy/brown, /turf/simulated/floor/wood, -/area/maintenance/station/spacecommandmaint) +/area/bridge/meeting_room) "axd" = ( -/obj/structure/bed/chair/comfy/black, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) -"axe" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/folder/blue, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/carpet/purcarpet, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"axe" = ( +/obj/machinery/light_switch{ + dir = 2; + name = "light switch "; + pixel_x = 0; + pixel_y = 30 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "axf" = ( /obj/machinery/button/remote/airlock{ id = "spacedorm2"; @@ -13260,16 +13510,15 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/spacedorm2) "axh" = ( -/obj/structure/bed/chair, /turf/simulated/floor/wood, -/area/maintenance/station/spacecommandmaint) +/area/bridge/meeting_room) "axi" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 +/obj/structure/bed/chair/comfy/brown, +/obj/machinery/newscaster{ + pixel_x = -30 }, -/turf/simulated/floor/wood/broken, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "axj" = ( /obj/machinery/alarm{ dir = 4; @@ -13279,29 +13528,26 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/spacedorm1) "axk" = ( -/obj/structure/bed/chair/comfy/brown, -/obj/machinery/newscaster{ - pixel_x = -30 +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "axl" = ( -/obj/structure/bed/chair/comfy/brown, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "axm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "axn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "intact-scrubbers"; @@ -13339,23 +13585,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/spacedorm2) "axq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/computer/teleporter{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "axr" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 @@ -13366,24 +13600,17 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "axs" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 }, -/obj/machinery/button/remote/blast_door{ - id = "SecondaryCommandShutter"; - name = "Privacy Shutters"; - pixel_x = 24; - pixel_y = 24; - req_access = list(); - req_one_access = list(19) +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/area/bridge/meeting_room) "axt" = ( /obj/random/trash_pile, /turf/simulated/floor, @@ -13529,38 +13756,46 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/backup) "axI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 5 +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "intact-supply"; - dir = 5 +/obj/item/weapon/storage/box/donut, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"axJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"axJ" = ( -/obj/structure/table/woodentable, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/area/bridge/meeting_room) "axK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/rust, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"axL" = ( -/obj/structure/bed/chair{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/wood/broken, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"axL" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 9 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "axM" = ( /obj/machinery/firealarm{ dir = 4; @@ -13643,16 +13878,18 @@ /turf/simulated/floor/tiled, /area/engineering/workshop) "axV" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24; - pixel_y = 0 +/obj/structure/dispenser{ + phorontanks = 0 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "axW" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 @@ -13823,19 +14060,19 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/spacedorm4) "ayl" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/wood, -/area/maintenance/station/spacecommandmaint) -"aym" = ( -/obj/machinery/light{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) +"aym" = ( +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "ayn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -13878,8 +14115,15 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "ayp" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "d1a2_dock"; + landmark_tag = "tether_excursion_dockarm"; + name = "Tether Docking Arm" + }, /turf/space, -/area/shuttle/excursion/tether_dockarm) +/area/space) "ayq" = ( /obj/machinery/computer/card{ dir = 1 @@ -13957,11 +14201,11 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "ayv" = ( -/obj/structure/bed/chair{ - dir = 8 +/obj/machinery/teleport/station{ + dir = 2 }, -/turf/simulated/floor/wood/broken, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "ayw" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 @@ -13988,28 +14232,11 @@ /turf/simulated/floor/tiled, /area/tether/station/stairs_one) "ayz" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/command, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 1; - icon_state = "pdoor0"; - id = "secondary_bridge_blast"; - name = "Secondary Command Office Blast Doors"; - opacity = 0 +/obj/structure/bed/chair/comfy/brown{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "ayA" = ( /obj/machinery/firealarm{ dir = 8; @@ -14076,46 +14303,37 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "ayE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/area/bridge/meeting_room) "ayF" = ( /obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) -"ayG" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/weapon/storage/box/donut, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) -"ayH" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, +/obj/item/weapon/storage/box/cups, /obj/machinery/light{ + icon_state = "tube1"; dir = 4 }, /turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/area/bridge/meeting_room) +"ayG" = ( +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) +"ayH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "ayI" = ( /obj/machinery/alarm{ dir = 4; @@ -14137,11 +14355,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/spacedorm3) "ayK" = ( -/obj/structure/bed/chair{ - dir = 1 +/obj/machinery/teleport/hub{ + dir = 2 }, -/turf/simulated/floor/wood/broken, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "ayL" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -14191,12 +14409,9 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "ayN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/reagent_dispensers/water_cooler/full, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "ayO" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -14284,14 +14499,8 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "ayR" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/railing, -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "ayS" = ( /obj/structure/cable/green{ d1 = 4; @@ -14469,14 +14678,12 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "aza" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 }, -/obj/structure/cable/green, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "azb" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -14543,17 +14750,14 @@ /turf/simulated/floor/tiled, /area/tether/station/dock_two) "azg" = ( -/obj/structure/railing, -/obj/structure/table/rack{ - dir = 8; - layer = 2.9 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/light/small{ - dir = 1 +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) "azh" = ( /obj/structure/table/standard, /obj/random/tech_supply, @@ -14757,43 +14961,62 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) "azu" = ( -/obj/structure/railing, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/simulated/floor, /area/maintenance/station/spacecommandmaint) "azv" = ( /turf/simulated/wall, /area/tether/station/visitorhallway/lounge) "azw" = ( -/obj/structure/railing, -/obj/effect/floor_decal/rust, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/table/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/device/gps/command, +/obj/item/device/gps/command, +/obj/item/device/gps/command, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) "azx" = ( /turf/simulated/wall, /area/tether/station/visitorhallway/laundry) "azy" = ( -/obj/structure/closet, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "azz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /obj/structure/disposalpipe/segment{ - dir = 4; + dir = 8; icon_state = "pipe-c" }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -28; - pixel_y = 0 +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "azA" = ( /obj/effect/floor_decal/borderfloor{ dir = 8; @@ -15210,19 +15433,17 @@ /turf/simulated/floor, /area/maintenance/station/spacecommandmaint) "aAo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/random/junk, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aAp" = ( /obj/machinery/light/small{ icon_state = "bulb1"; @@ -15240,98 +15461,109 @@ icon_state = "intact-scrubbers"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aAs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aAt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/structure/table/woodentable, +/obj/item/weapon/folder/blue, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"aAu" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/bridge/secondary/teleporter) +"aAv" = ( +/obj/machinery/shieldwallgen, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/bridge/secondary/teleporter) +"aAw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"aAu" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/table/rack{ - dir = 8; - layer = 2.9 - }, -/obj/effect/floor_decal/rust, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"aAv" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/railing, -/obj/structure/closet/crate, -/obj/effect/floor_decal/rust, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"aAw" = ( -/obj/structure/closet/crate, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/mre, -/obj/structure/railing, -/obj/effect/floor_decal/rust, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"aAx" = ( -/obj/structure/railing, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"aAy" = ( -/obj/structure/railing, -/obj/structure/railing{ dir = 4 }, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) -"aAz" = ( -/obj/effect/floor_decal/rust, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 5 + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 2 + }, +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) +"aAx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - icon_state = "intact-supply"; - dir = 5 + dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/computer/id_restorer{ dir = 1; - icon_state = "pipe-c" + icon_state = "restorer"; + pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) +"aAy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) +"aAz" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aAA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -15343,17 +15575,12 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "aAB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor, /area/maintenance/station/spacecommandmaint) "aAC" = ( @@ -15379,14 +15606,11 @@ /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/office) "aAE" = ( -/obj/effect/floor_decal/rust, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 +/obj/machinery/keycard_auth{ + pixel_x = -24 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aAF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -15450,13 +15674,18 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "aAJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + icon_state = "intact-supply"; + dir = 5 + }, /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 4; + icon_state = "1-4" }, /turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/area/bridge/meeting_room) "aAK" = ( /obj/structure/closet/wardrobe/black, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -15869,10 +16098,16 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/workshop) "aBz" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aBA" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 @@ -15956,10 +16191,13 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) "aBF" = ( -/obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, -/area/maintenance/station/spacecommandmaint) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aBG" = ( /obj/structure/table/rack{ dir = 8; @@ -16042,13 +16280,19 @@ /turf/simulated/floor/tiled, /area/crew_quarters/sleep/spacedorm4) "aBO" = ( -/obj/structure/table/rack{ - dir = 8; - layer = 2.9 +/obj/machinery/keycard_auth{ + pixel_x = 24 }, -/obj/random/maintenance/clean, -/obj/random/maintenance/clean, -/obj/random/contraband, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"aBP" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/common, /turf/simulated/floor, /area/maintenance/station/spacecommandmaint) "aBQ" = ( @@ -16099,16 +16343,20 @@ /turf/simulated/floor/tiled/dark, /area/bridge/secondary) "aBT" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/command{ + req_one_access = list(17) }, -/obj/machinery/camera/network/command{ - icon_state = "camera"; - dir = 9 +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor, +/area/bridge/secondary/teleporter) "aBU" = ( /obj/machinery/door/airlock{ name = "Unit 2" @@ -16120,12 +16368,8 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) "aBW" = ( -/obj/machinery/camera/network/command{ - icon_state = "camera"; - dir = 9 - }, -/turf/simulated/floor/wood, -/area/bridge/secondary/meeting_room) +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aBX" = ( /obj/machinery/door/airlock{ name = "Restroom" @@ -16133,6 +16377,11 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) +"aBY" = ( +/obj/structure/bed/chair/comfy/black, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aBZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -16291,6 +16540,31 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/tether/station/stairs_one) +"aCq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/machinery/camera/network/tether{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "aCr" = ( /obj/machinery/door/firedoor/glass/hidden/steel{ dir = 1 @@ -16661,6 +16935,11 @@ }, /turf/simulated/floor/tiled, /area/engineering/hallway) +"aCW" = ( +/obj/structure/bed/chair/comfy/black, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aCX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -16929,6 +17208,14 @@ }, /turf/simulated/floor/tiled, /area/hallway/station/docks) +"aDq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aDr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -17046,6 +17333,46 @@ }, /turf/simulated/floor/tiled, /area/tether/station/visitorhallway) +"aDy" = ( +/obj/machinery/light/small{ + dir = 8; + pixel_y = 0 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"aDz" = ( +/obj/structure/bed/chair/comfy/blue{ + icon_state = "comfychair_preview"; + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) +"aDA" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/book/manual/security_space_law, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) +"aDB" = ( +/obj/structure/table/rack{ + dir = 8; + layer = 2.9 + }, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/contraband, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) +"aDC" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/folder/blue, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aDD" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/undies_wardrobe, @@ -17072,6 +17399,13 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/tether/station/dock_one) +"aDI" = ( +/obj/structure/bed/chair/comfy/blue{ + icon_state = "comfychair_preview"; + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aDJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, @@ -17106,6 +17440,17 @@ }, /turf/simulated/floor, /area/maintenance/substation/civilian) +"aDN" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aDO" = ( /obj/machinery/door/airlock/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -17159,6 +17504,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/maintenance/station/spacecommandmaint) +"aDS" = ( +/obj/structure/closet/crate, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/mre, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "aDT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -17204,6 +17556,18 @@ }, /turf/simulated/floor/tiled, /area/tether/station/dock_two) +"aDX" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 + }, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) +"aDY" = ( +/obj/machinery/light/small, +/turf/simulated/floor, +/area/maintenance/station/spacecommandmaint) "aDZ" = ( /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 @@ -17244,6 +17608,30 @@ }, /turf/simulated/floor/tiled, /area/engineering/engine_eva) +"aEc" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/command, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 1; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor, +/area/bridge/meeting_room) +"aEd" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) +"aEe" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/folder/red, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aEf" = ( /obj/structure/cable/green{ d1 = 1; @@ -17256,6 +17644,21 @@ }, /turf/simulated/floor/tiled, /area/engineering/engine_eva) +"aEg" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/structure/cable/green, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"aEh" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/bridge/meeting_room) "aEi" = ( /obj/machinery/door/firedoor/glass, /obj/structure/disposalpipe/segment, @@ -17429,6 +17832,20 @@ }, /turf/simulated/floor/tiled, /area/engineering/foyer) +"aEv" = ( +/obj/machinery/camera/network/command{ + icon_state = "camera"; + dir = 9 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) +"aEw" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aEx" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ icon_state = "map"; @@ -17518,6 +17935,14 @@ }, /turf/simulated/floor/tiled, /area/tether/station/visitorhallway/laundry) +"aED" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 22; + pixel_y = 0 + }, +/turf/simulated/floor/wood, +/area/bridge/meeting_room) "aEE" = ( /obj/structure/toilet{ dir = 4 @@ -17528,6 +17953,21 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/engi_wash) +"aEF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 8; + icon_state = "pdoor0"; + id = "secondary_bridge_blast"; + name = "Secondary Command Office Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/bridge/meeting_room) "aEM" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -18054,8 +18494,14 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_eva) "aIb" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + landmark_tag = "antag_space_docks"; + name = "Tether Docking Arm" + }, /turf/space, -/area/shuttle/antag_space/docks) +/area/space) "aIc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -18316,8 +18762,15 @@ /turf/simulated/floor/plating, /area/tether/station/dock_one) "aJr" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "trade_shuttle_dock_airlock"; + landmark_tag = "trade_station"; + name = "Tether Docking Arm" + }, /turf/space, -/area/shuttle/trade/station) +/area/space) "aJs" = ( /turf/simulated/wall/r_wall, /area/engineering/storage) @@ -20424,6 +20877,13 @@ }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) +"bbT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "bch" = ( /obj/structure/cable/green{ d1 = 1; @@ -20807,6 +21267,33 @@ }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) +"bdZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "beJ" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 @@ -21546,8 +22033,15 @@ /turf/simulated/floor/tiled, /area/hallway/station/docks) "bwb" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "tether_dock_airlock"; + landmark_tag = "tether_backup_high"; + name = "Tether Docking Arm" + }, /turf/space, -/area/shuttle/tether/station) +/area/space) "byy" = ( /obj/machinery/recharge_station, /obj/machinery/light/small{ @@ -22508,8 +23002,15 @@ /turf/simulated/floor, /area/vacant/vacant_restaurant_lower) "bYr" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "nuke_shuttle_dock_airlock"; + landmark_tag = "merc_tether_dock"; + name = "Tether Docking Arm" + }, /turf/space, -/area/syndicate_station/arrivals_dock) +/area/space) "bYt" = ( /obj/structure/window/reinforced, /obj/structure/bed/chair{ @@ -22662,9 +23163,6 @@ /obj/machinery/meter, /turf/simulated/floor/tiled, /area/engineering/atmos/backup) -"cch" = ( -/turf/space, -/area/shuttle/cruiser/station) "ccl" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/power/thermoregulator, @@ -22708,8 +23206,14 @@ /turf/simulated/floor/plating, /area/tether/station/dock_two) "eIG" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + landmark_tag = "ninja_outside"; + name = "Ninja Near Tether" + }, /turf/space, -/area/ninja_dojo/orbit) +/area/space) "hPi" = ( /obj/machinery/light/small, /turf/simulated/floor, @@ -22825,8 +23329,14 @@ /turf/simulated/floor/tiled, /area/tether/station/dock_one) "ssv" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + landmark_tag = "skipjack_outside"; + name = "Skipjack Near Tether" + }, /turf/space, -/area/skipjack_station/orbit) +/area/space) "tKI" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -24850,10 +25360,10 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa aaa aaa aaa @@ -24991,12 +25501,12 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25133,12 +25643,12 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25275,12 +25785,12 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25417,12 +25927,12 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25559,12 +26069,12 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25696,22 +26206,22 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25821,10 +26331,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp aaa aaa aaa @@ -25837,24 +26343,28 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -25953,21 +26463,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -25979,24 +26474,39 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26095,21 +26605,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -26121,24 +26616,39 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr -aJr aaa -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26236,22 +26746,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -26263,24 +26757,40 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26378,21 +26888,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -26405,24 +26900,39 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26519,22 +27029,22 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aab aaa aaa @@ -26547,24 +27057,24 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26661,22 +27171,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -26689,24 +27183,40 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26803,22 +27313,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -26831,24 +27325,40 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -26945,22 +27455,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -26973,24 +27467,40 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27087,22 +27597,6 @@ aaa aaa aaa aaa -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp aaa aaa aaa @@ -27115,24 +27609,40 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27230,50 +27740,50 @@ aac aac aac aac -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -aaa -cch -cch -cch -cch -cch -cch -cch aaa aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27372,49 +27882,49 @@ bYP bYP aac aac -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -cch -cch -cch -cch -cch -cch -cch aaa aaa aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27515,48 +28025,48 @@ bYP aac aac aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -cch -cch -cch -cch -cch -cch -cch +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aab aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27657,48 +28167,48 @@ bYP aac aac aac -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -ayp -cch -cch -cch -cch -cch -cch -cch aaa aaa aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27806,13 +28316,13 @@ aac aac aaa aaa -ayp -ayp +aaa +aaa bGo bHt bJl -ayp -ayp +aaa +aaa aaa aaa aaa @@ -27826,22 +28336,22 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -27967,24 +28477,24 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28108,26 +28618,26 @@ aCF bzn bzn bQv -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28250,26 +28760,26 @@ bPY bQj aBQ bQz +aaa aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28392,26 +28902,26 @@ bPX bQe bQm bQx -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28534,26 +29044,26 @@ aFU aDH aDH aJo -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28677,24 +29187,24 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28820,22 +29330,22 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28943,11 +29453,11 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -28962,22 +29472,22 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29085,42 +29595,42 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aaa -bwb -bwb -bwb -bwb -bwb -bwb -bwb aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29227,43 +29737,43 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK aaa aaa -bwb -bwb -bwb -bwb -bwb -bwb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa bwb aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29369,43 +29879,43 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aaa -bwb -bwb -bwb -bwb -bwb -bwb -bwb aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29511,43 +30021,43 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aaa -bwb -bwb -bwb -bwb -bwb -bwb -bwb aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29653,43 +30163,43 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aaa -bwb -bwb -bwb -bwb -bwb -bwb -bwb -aaa -aaa -aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr aaa aaa aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29795,11 +30305,11 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29812,12 +30322,6 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr aaa aaa aaa @@ -29826,12 +30330,18 @@ aaa aaa aaa aaa -aJr -aJr -aJr -aJr -aJr -aJr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -29937,39 +30447,39 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb aaa aaa aaa aaa aaa -bYr -bYr -bYr aaa -bYr -bYr -bYr -bYr aaa -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30079,40 +30589,40 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30221,41 +30731,41 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK aaa -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aIb aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30363,41 +30873,41 @@ aaa aaa aaa aaa -amK -amK -amK -amK -amK -aaa -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30506,40 +31016,40 @@ aaa aaa aaa aaa -amK -amK +aaa amK aaa aaa -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb -aIb aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30665,24 +31175,24 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30806,26 +31316,26 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -30948,26 +31458,26 @@ aCK aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31090,26 +31600,26 @@ aFZ bzq bzq bJm -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31232,26 +31742,26 @@ bQc bQk bQt bQC +aaa bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31374,26 +31884,26 @@ bQd bQl bQu bQF -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31516,26 +32026,26 @@ aCK aJi aJi bQD -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31624,7 +32134,7 @@ aWj aco aZP bbE -afV +bdZ aaT bhg axD @@ -31658,26 +32168,26 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31766,7 +32276,7 @@ atq afC arh acp -afW +bdT aaT axb axE @@ -31800,26 +32310,26 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -31908,7 +32418,7 @@ afC afC agY ahG -agl +aip afI afI afI @@ -31943,24 +32453,24 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32050,7 +32560,7 @@ afE afn ahF aio -ahn +afW agk auq ahU @@ -32086,22 +32596,22 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32228,22 +32738,22 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32334,7 +32844,7 @@ afF age agj acp -aht +ain agk auR aie @@ -32370,22 +32880,22 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32421,10 +32931,10 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32476,7 +32986,7 @@ afN agg ago acp -ahL +aCq afI ahE aie @@ -32511,24 +33021,24 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32553,21 +33063,21 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32618,7 +33128,7 @@ afC aYt agw air -ain +aAw afI ahP aie @@ -32652,26 +33162,26 @@ ahW aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32695,21 +33205,21 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32760,7 +33270,7 @@ aWn agh agj acp -aip +atM agk ahC aie @@ -32771,7 +33281,7 @@ atV avy agk avK -aup +aqg awG axf axF @@ -32794,26 +33304,26 @@ ahW aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32836,22 +33346,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32902,7 +33412,7 @@ acm acm agj acp -aip +atM agk ahC aic @@ -32913,7 +33423,7 @@ aux avA afI avT -aut +aqx aww axg axM @@ -32936,26 +33446,26 @@ ahW aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -32978,21 +33488,21 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33044,7 +33554,7 @@ adH adH ahi acp -aip +atM afI ahQ aif @@ -33055,7 +33565,7 @@ auC avC afI avU -auD +asB aww aww aww @@ -33078,26 +33588,26 @@ ahW aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33119,22 +33629,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33184,9 +33694,9 @@ afo afo afo afo -afc -afH -aiq +ahI +ais +aAx afI afI afI @@ -33197,49 +33707,49 @@ afI afI afI aAn -auF +asH aDR -awY -axK -avl -ayN -avi -axI -acQ -aAw +aui ail +aBL +ail +ail +ail +ail +ail +ail +aBL +aBP +ail +aDS acQ aat aat aat -aat -aat -aat -aat ahW aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33261,22 +33771,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33327,61 +33837,61 @@ acy acy acy acy -agm -ait +ahH +aAy acQ ahp aud auf -aiI -ahI -ahI -aiE -ahI -aqg -acQ -acQ -acQ -acQ -acQ -acQ -ayR -aAo -acQ -azw +azu +aAB +aAB +aAB +aAB +ahN +asM +atz +aup +avb +awC +awC +awC +awC +awC +awC +awC +awC +awC +ail aBK acQ aat aat aat -aat -aat aaa aaa aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33403,22 +33913,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33469,34 +33979,37 @@ adl acC adm acy -agr -aiu -aiB -aiE -agC -ahI -aqg +aCx +aiq +agl +ahL +ahL +ahL +azz aBK -ail -asG -asG -ail -auG +afV +afV +afV +afV +afV +afV +auD +avi awC -axc -axL +awV +axk +axV +ayG +ayR +aAu +ayR awC -acQ -azg -aAr -acQ -aAx -aAE +ail +aDX acQ aat aat aat -aat aaa aaa aaa @@ -33504,26 +34017,23 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33545,22 +34055,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33611,34 +34121,37 @@ adl adE amv acy -ags +acm alh acQ aAp -agD -aBL ail +ail +auj aBL -asG -asG -agD -aBL -acQ +afV +agy +ahg +aia +asW +afV +auF +avl awN -axh +awW +axl ayl -ayK -acQ -azu -aAs -acQ -aAy -aBz +ayH +aza +ayR +ayR +aBT +ail +aDY acQ aat aat aat -aat aaa aaa aaa @@ -33646,26 +34159,23 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33687,22 +34197,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33753,29 +34263,33 @@ adl amu amv acy -ags +acm alO acQ aBG -ahg +aix aBx -asH +ait +aut +agr +agB +ahj +aiu +asX +atP +auG +avr +awC +awX +axm +aym +aym +azg +aAv +aAv +awC aBL ail -aBL -atc -atM -acQ -awQ -axi -ayv -axc -acQ -azw -aAt -avi -aAz -aBF acQ aat aat @@ -33788,26 +34302,22 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33830,21 +34340,21 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33895,7 +34405,7 @@ acy amr amw acy -ags +acm alP acV acV @@ -33908,16 +34418,20 @@ acV acV acV acV -ahN -ahN -ahN -ahN -ahN -azy -aAu +acV +auH +avv +awC +awY +axq +ayv +ayK +azw aAv -aAB -aBO +aAv +awC +aDB +ail acQ aat aat @@ -33931,24 +34445,20 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -33972,22 +34482,22 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -34037,31 +34547,35 @@ acy adl adl acy -agx -agy -agA -agB -ahj -ahj -ahj -ais -asM +bbT asV -atz -atP +afc +afH +agm +agm +agm +agm +ags +agC +ahn +aiB ayq -ahN -axk -ayF -auH -ahN -ahN -ahN -ahN -ayz -ahN -ahN -aat +acV +auI +avY +awQ +awQ +awQ +awQ +awQ +awQ +awQ +awQ +awQ +awQ +aEc +awQ +awQ aat aat aaa @@ -34074,22 +34588,18 @@ aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr aaa aaa aaa aaa aaa aaa -bYr -bYr -bYr -bYr -bYr +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -34115,21 +34625,21 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa aaa aaa aaa @@ -34186,24 +34696,28 @@ afl agn agn agn -aix +agn ame agn agE -atR +aiE agK -ahN -axl -ayG +atR auI -aiH -azz -axV -aym -ayE -aia -awX -aat +awe +awQ +axi +axs +ayz +axh +axh +aEw +aAE +axh +aDy +axh +axh +aEF aat aat aaa @@ -34217,9 +34731,6 @@ aaa aaa aaa aaa -bYr -bYr -bYr aaa aaa aaa @@ -34228,9 +34739,8 @@ aaa aaa aaa aaa -bYr -bYr -bYr +aaa +aaa aaa aaa aaa @@ -34257,21 +34767,21 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -34328,30 +34838,30 @@ asR afd afd afd -aqx -afd -ata -agE -aui +agA +agx +agD +aht +aiH agM -awV -aia -aia -auK -aia -avY -aln -awz -awz -aln -awX +atR +auI +awg +awQ +axc +axI +ayz +axh +axh +axh +axh +aBW +aDz +aDz +aBW +aEF aat aat -aat -aaa -aaa -aaa -aaa aaa aaa aaa @@ -34406,13 +34916,13 @@ aaa aaa aaa aaa -aaf -aaf aaa aaa aaa -aaf -aaf +aaa +aaa +aaa +aaa aaa aaa aaa @@ -34476,24 +34986,24 @@ afK agE avQ agS -awV -aia -aia +atR auK -aia awh awS -asB -asW -avv -awX +axd +axJ +ayE +ayE +aAo +ayE +aAJ +aBY +aDA +aEd +aEh +aEF aat aat -aat -aaa -aaa -aaa -aaa aaa aaa aaa @@ -34618,24 +35128,24 @@ afw agE azc ahe -awV -aia -aia -auK -aia -awA -axd +atR +auI +awy +awQ axe -asX -avv -awX +axK +axh +axh +aAr +aAz +aBz +aCW +aDC +aEe +aEh +aEF aat aat -aat -aaa -aaa -aaa -aaa aaa aaa aaa @@ -34758,26 +35268,26 @@ aeY afh afR agE -azc -avr -awV -aia -aia -auK -aia -axm -aln -aub -aub -aln -awX +aiI +ata +atR +auM +avY +awQ +axh +axK +axh +axh +aAs +axh +aBF +aBW +aDI +aDI +aBW +aEF aat aat -aat -aat -aaa -aaa -aaa aaa aaa aaa @@ -34900,26 +35410,26 @@ aAC aBS ahh aom -auj -awg -awW -axs -auV -auM -auV -axq -aAJ -aAJ -aza -aBW -awX +aln +atc +aub +auN +awz +awQ +axh +axK +axh +axh +aAt +aED +aBO +aDq +aDN +aEg +aEv +aEF aat aat -aat -aat -aat -aaa -aaa aaa aaa aaa @@ -35044,24 +35554,24 @@ ahk agt agG azd -ahN -axJ -ayH -auN -avb -aBT -awe -awy -ahN -ahN -ahN -aqd -aqd -aqd -aqd +acV +auV +awA +awQ +azy +axL +ayF +ayN +asG +asG +asG +asG +asG +asG +asG +awQ +aat aat -aaa -aaa aaa aaa aaa @@ -35186,15 +35696,15 @@ acV acV acV acV -ahN -ahN -ahN -ahN -ahN -ahN -ahN -ahN -ahN +acV +avb +avb +asG +asG +asG +asG +asG +asG aqW ari ars @@ -35202,8 +35712,8 @@ arU asf aqd aat -aaa -aaa +aat +aat aaa aaa aaa @@ -38825,8 +39335,8 @@ aaa aaa aaa aaa -ssv -ssv +aaa +aaa aaa aaa aaa @@ -38957,19 +39467,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39099,19 +39609,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39241,19 +39751,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39383,19 +39893,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39529,19 +40039,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39671,19 +40181,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -39707,10 +40204,23 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39811,22 +40321,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -39848,12 +40342,28 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -39951,25 +40461,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -39990,13 +40481,32 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40094,24 +40604,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -40129,17 +40621,35 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40236,24 +40746,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -40273,15 +40765,33 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40379,23 +40889,23 @@ aaa aaa aaa ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40416,14 +40926,14 @@ aaa aaa aaa eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40520,24 +41030,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -40557,15 +41049,33 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40662,24 +41172,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -40697,17 +41189,35 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40803,25 +41313,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -40842,13 +41333,32 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -40947,22 +41457,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -40984,12 +41478,28 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41091,19 +41601,6 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv aaa aaa aaa @@ -41127,10 +41624,23 @@ aaa aaa aaa aaa -eIG -eIG -eIG -eIG +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41233,19 +41743,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41371,19 +41881,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41513,19 +42023,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41655,19 +42165,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41797,19 +42307,19 @@ aaa aaa aaa aaa -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv -ssv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -41949,8 +42459,8 @@ aaa aaa aaa aaa -ssv -ssv +aaa +aaa aaa aaa aaa diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index bd25f720b0..744a333bd4 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -2018,10 +2018,10 @@ }, /obj/machinery/floodlight, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dj" = ( /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dk" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -2171,7 +2171,7 @@ /obj/item/weapon/bedsheet/brown, /obj/structure/curtain/open/bed, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2190,7 +2190,7 @@ "dB" = ( /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dC" = ( /obj/structure/bed/chair/comfy/blue{ icon_state = "comfychair_preview"; @@ -2205,7 +2205,7 @@ pixel_y = 0 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dD" = ( /obj/machinery/button/remote/blast_door{ dir = 8; @@ -2222,7 +2222,7 @@ dir = 10 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dE" = ( /obj/structure/bed/chair/comfy/blue{ icon_state = "comfychair_preview"; @@ -2244,7 +2244,7 @@ dir = 4 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dF" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -2482,7 +2482,7 @@ /obj/item/clothing/suit/space/void/pilot, /obj/item/clothing/head/helmet/space/void/pilot, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dX" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -2504,7 +2504,7 @@ }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "dZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 4 @@ -2526,13 +2526,13 @@ specialfunctions = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ea" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "eb" = ( /obj/machinery/door/airlock/hatch{ req_one_access = list(67) @@ -2541,7 +2541,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ec" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -2555,7 +2555,7 @@ pixel_x = -22 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ed" = ( /obj/structure/railing, /turf/space, @@ -2598,7 +2598,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "eh" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 8 @@ -2840,7 +2840,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ey" = ( /turf/simulated/floor/carpet, /area/security/breakroom) @@ -3275,13 +3275,13 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "fh" = ( /obj/machinery/light/spot{ pixel_y = 32 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "fi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "intact-scrubbers"; @@ -3291,7 +3291,7 @@ dir = 6 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "fj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3301,7 +3301,7 @@ dir = 4 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "fk" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -3478,7 +3478,7 @@ dir = 4 }, /turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "fy" = ( /turf/simulated/wall/r_wall, /area/ai) @@ -3777,7 +3777,7 @@ /obj/item/weapon/storage/box/survival/space, /obj/item/weapon/storage/toolbox/emergency, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "fW" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/borderfloorblack/corner2{ @@ -4205,7 +4205,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "gM" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 @@ -4216,7 +4216,7 @@ }, /obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "gN" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -4377,7 +4377,7 @@ }, /obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "hd" = ( /obj/structure/table/woodentable, /obj/machinery/photocopier/faxmachine{ @@ -5317,7 +5317,7 @@ }, /obj/structure/disposalpipe/trunk, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "iu" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 8 @@ -5632,7 +5632,7 @@ }, /obj/structure/plasticflaps, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "iL" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 6 @@ -5774,19 +5774,19 @@ /area/maintenance/cargo) "iW" = ( /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "iX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 6 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "iY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 4 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "iZ" = ( /obj/effect/floor_decal/borderfloorblack/full, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -6366,7 +6366,7 @@ dir = 1 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "jW" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -6398,14 +6398,14 @@ }, /obj/machinery/recharge_station, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "jZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ka" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -6416,14 +6416,14 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /obj/effect/floor_decal/industrial/outline/red, /obj/structure/closet/secure_closet/guncabinet/excursion, /obj/item/weapon/pickaxe, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kc" = ( /obj/effect/floor_decal/borderfloorblack/full, /obj/effect/floor_decal/steeldecal/steel_decals5{ @@ -6538,7 +6538,7 @@ }, /obj/structure/handrail, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kk" = ( /obj/effect/floor_decal/industrial/warning{ dir = 5 @@ -6560,7 +6560,7 @@ pixel_y = 0 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kl" = ( /obj/structure/cable/cyan{ d2 = 2; @@ -6752,7 +6752,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ky" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -6760,7 +6760,7 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/visible, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kz" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -6962,7 +6962,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kR" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -6971,8 +6971,15 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, +/obj/effect/shuttle_landmark/transit{ + base_area = /area/tether/exploration; + base_turf = /turf/simulated/floor/reinforced; + docking_controller = "expshuttle_dock"; + landmark_tag = "tether_excursion_hangar"; + name = "Excursion Shuttle Dock" + }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "kS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -7290,7 +7297,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "lr" = ( /obj/effect/floor_decal/techfloor{ dir = 8 @@ -7740,8 +7747,14 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/ai) "lY" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + landmark_tag = "antag_space_nearby"; + name = "Space near Tether" + }, /turf/space, -/area/shuttle/antag_space/north) +/area/space) "lZ" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green, @@ -16998,7 +17011,7 @@ /obj/structure/shuttle/engine/propulsion, /turf/simulated/floor/reinforced, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Ao" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -18743,11 +18756,15 @@ /turf/simulated/floor/plating, /area/quartermaster/storage) "CS" = ( -/turf/simulated/floor/airless, -/area/supply/station{ +/obj/effect/shuttle_landmark{ + base_area = /area/space; base_turf = /turf/simulated/floor/airless; - dynamic_lighting = 0 - }) + docking_controller = "cargo_bay"; + landmark_tag = "supply_station"; + name = "Tether Cargo Bay" + }, +/turf/simulated/floor/airless, +/area/space) "CT" = ( /obj/structure/safe, /obj/item/clothing/under/color/yellow, @@ -25793,7 +25810,7 @@ /area/medical/virology) "NS" = ( /turf/simulated/shuttle/wall, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "NT" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -25803,11 +25820,11 @@ name = "Emergency Airlock" }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "NU" = ( /obj/structure/sign/redcross, /turf/simulated/shuttle/wall, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "NV" = ( /turf/simulated/mineral/floor/vacuum, /area/hallway/secondary/escape/medical_escape_pod_hallway) @@ -25868,7 +25885,7 @@ dir = 4 }, /turf/simulated/floor/airless, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Oa" = ( /obj/machinery/atmospherics/unary/cryo_cell{ layer = 3.3 @@ -25877,7 +25894,7 @@ dir = 8 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Ob" = ( /obj/structure/table/standard, /obj/random/medical/lite, @@ -25887,7 +25904,7 @@ pixel_y = 0 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Oc" = ( /obj/structure/table/rack, /obj/item/weapon/tank/emergency/oxygen, @@ -25903,7 +25920,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Od" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ frequency = 1380; @@ -25913,21 +25930,21 @@ tag_door = "large_escape_pod_1_hatch" }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Oe" = ( /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Of" = ( /obj/structure/bed/chair, /obj/machinery/light{ dir = 1 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Og" = ( /obj/structure/bed/chair, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Oh" = ( /obj/structure/bed/chair, /obj/machinery/vending/wallmed1{ @@ -25938,10 +25955,10 @@ }, /obj/structure/closet/walllocker/emerglocker/north, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Oi" = ( /turf/simulated/shuttle/wall/hard_corner, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Oj" = ( /obj/structure/bed/padded, /obj/machinery/alarm{ @@ -26059,19 +26076,19 @@ dir = 8 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Ot" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Ou" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Ov" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -26081,8 +26098,15 @@ "Ow" = ( /obj/structure/shuttle/window, /obj/structure/grille, +/obj/effect/shuttle_landmark{ + base_area = /area/hallway/secondary/escape/medical_escape_pod_hallway; + base_turf = /turf/simulated/floor/plating; + docking_controller = "large_escape_pod_1_berth"; + landmark_tag = "escapepod1_station"; + name = "Tether Station" + }, /turf/simulated/shuttle/plating, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "Ox" = ( /turf/simulated/open, /area/tether/exploration) @@ -26198,7 +26222,7 @@ /obj/machinery/portable_atmospherics/canister/oxygen/prechilled, /obj/machinery/light, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OI" = ( /obj/machinery/atmospherics/unary/freezer{ dir = 1; @@ -26206,7 +26230,7 @@ use_power = 1 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OJ" = ( /obj/structure/closet/crate/medical, /obj/item/weapon/storage/firstaid/regular{ @@ -26253,37 +26277,37 @@ }, /obj/item/device/defib_kit/loaded, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OK" = ( /obj/machinery/sleeper{ dir = 8 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OL" = ( /obj/machinery/sleep_console, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OM" = ( /obj/structure/bed/chair{ dir = 1 }, /obj/machinery/light, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "ON" = ( /obj/structure/bed/chair{ dir = 1 }, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OO" = ( /obj/structure/bed/chair{ dir = 1 }, /obj/structure/closet/walllocker/emerglocker/south, /turf/simulated/shuttle/floor, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "OP" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, /obj/item/device/radio/intercom/department/medbay{ @@ -27682,7 +27706,7 @@ dir = 10 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Rw" = ( /obj/structure/catwalk, /obj/machinery/light/small{ @@ -28346,7 +28370,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "SP" = ( /obj/item/modular_computer/console/preset/command{ dir = 1 @@ -28369,7 +28393,7 @@ }, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "SR" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -28482,7 +28506,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Td" = ( /obj/structure/cable/green{ d1 = 1; @@ -28545,7 +28569,7 @@ dir = 8 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Tj" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, @@ -28569,7 +28593,7 @@ /obj/item/clothing/suit/space/void/pilot, /obj/item/clothing/head/helmet/space/void/pilot, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Tm" = ( /obj/machinery/airlock_sensor{ frequency = 1379; @@ -28627,7 +28651,7 @@ icon_state = "0-2" }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Tr" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -28658,7 +28682,7 @@ dir = 1 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Tv" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5; @@ -28774,7 +28798,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "TH" = ( /obj/structure/cable/green{ d1 = 1; @@ -28807,7 +28831,7 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/effect/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "TK" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 1; @@ -28898,7 +28922,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "TU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28961,7 +28985,7 @@ /obj/structure/handrail, /obj/machinery/light, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "TZ" = ( /obj/structure/table/standard, /obj/item/weapon/paper/rogueminer, @@ -29007,7 +29031,7 @@ }, /obj/effect/floor_decal/industrial/warning/full, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Ug" = ( /obj/effect/floor_decal/industrial/warning/corner{ icon_state = "warningcorner"; @@ -29061,7 +29085,7 @@ "Um" = ( /obj/machinery/sleep_console, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Un" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -29145,7 +29169,7 @@ pixel_y = 22 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Ut" = ( /obj/effect/landmark/start{ name = "Medical Doctor" @@ -29206,7 +29230,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UA" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -29224,7 +29248,7 @@ pixel_y = -22 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UC" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -29246,18 +29270,18 @@ dir = 1 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UE" = ( /obj/structure/bed/chair/shuttle, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UF" = ( /turf/simulated/shuttle/wall, -/area/shuttle/belter/station) +/area/shuttle/belter) "UG" = ( /obj/machinery/door/unpowered/shuttle, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "UH" = ( /turf/simulated/floor/tiled/asteroid_steel/airless, /area/quartermaster/belterdock) @@ -29273,14 +29297,14 @@ icon_state = "pipe-c" }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UK" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/handrail{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UL" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -29293,7 +29317,7 @@ icon_state = "intact" }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UM" = ( /obj/machinery/atmospherics/pipe/tank/carbon_dioxide{ dir = 8; @@ -29301,7 +29325,7 @@ }, /obj/effect/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UN" = ( /obj/structure/table/standard, /obj/machinery/recharger, @@ -29337,7 +29361,7 @@ amount = 5 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "intact-scrubbers"; @@ -29359,7 +29383,7 @@ icon_state = "intact" }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "US" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -29400,7 +29424,7 @@ }, /obj/structure/handrail, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UV" = ( /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 6 @@ -29415,7 +29439,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UX" = ( /obj/machinery/computer/shuttle_control/belter{ dir = 8 @@ -29427,7 +29451,7 @@ dir = 1 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "UZ" = ( /obj/structure/shuttle/engine/heater{ dir = 8 @@ -29436,24 +29460,24 @@ dir = 4 }, /turf/simulated/floor/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Va" = ( /obj/structure/closet/crate, /obj/machinery/light{ dir = 1 }, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vb" = ( /obj/machinery/embedded_controller/radio/airlock/docking_port{ id_tag = "belter_docking"; pixel_y = 26 }, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vc" = ( /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vd" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -29474,7 +29498,7 @@ pixel_y = 0 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Ve" = ( /obj/structure/cable/green{ d1 = 1; @@ -29510,7 +29534,7 @@ /obj/item/clothing/head/helmet/space/emergency, /obj/structure/closet/emcloset/legacy, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Vg" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -29522,18 +29546,18 @@ /obj/item/weapon/storage/mre/menu11, /obj/item/weapon/storage/mre/menu10, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Vh" = ( /obj/structure/bed/chair/shuttle, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vi" = ( /obj/machinery/shuttle_sensor{ dir = 2; id_tag = "shuttlesens_exp_psg" }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Vj" = ( /obj/structure/closet/emcloset, /obj/machinery/light{ @@ -29541,10 +29565,10 @@ dir = 4 }, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vk" = ( /turf/simulated/shuttle/wall/hard_corner, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/window/westleft{ @@ -29597,27 +29621,33 @@ "Vq" = ( /obj/structure/ore_box, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vr" = ( /obj/structure/bed/chair/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vs" = ( /obj/machinery/computer/shuttle_control/belter{ dir = 8 }, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vt" = ( /obj/structure/shuttle/window, +/obj/effect/shuttle_landmark{ + base_area = /area/quartermaster/belterdock; + base_turf = /turf/simulated/floor/tiled/asteroid_steel/airless; + landmark_tag = "belter_station"; + name = "Tether Parking Spot" + }, /turf/simulated/floor/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vu" = ( /obj/structure/flight_left, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Vv" = ( /obj/structure/sink{ pixel_y = 26 @@ -29637,12 +29667,12 @@ dir = 8 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Vx" = ( /obj/structure/closet/crate, /obj/machinery/light, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vy" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -29650,14 +29680,14 @@ }, /turf/simulated/floor/tiled/asteroid_steel/airless, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/belter/station) +/area/shuttle/belter) "Vz" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8 }, /turf/simulated/floor/tiled/asteroid_steel/airless, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/belter/station) +/area/shuttle/belter) "VA" = ( /obj/effect/landmark/start{ name = "Medical Doctor" @@ -29682,26 +29712,26 @@ }, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "VC" = ( /obj/structure/bed/chair/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor/yellow/airless, -/area/shuttle/belter/station) +/area/shuttle/belter) "VD" = ( /obj/machinery/atmospherics/binary/pump, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "VE" = ( /obj/structure/closet/walllocker/emerglocker{ pixel_x = -32 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "VF" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -29771,7 +29801,7 @@ }, /turf/simulated/floor/tiled/asteroid_steel/airless, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/belter/station) +/area/shuttle/belter) "VO" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -29779,27 +29809,27 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "VP" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8 }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "VQ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 8; icon_state = "map" }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "VR" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "VS" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -29807,7 +29837,7 @@ }, /turf/space, /turf/simulated/shuttle/plating/airless/carry, -/area/shuttle/large_escape_pod1/station) +/area/shuttle/large_escape_pod1) "VU" = ( /obj/machinery/firealarm{ dir = 2; @@ -29826,7 +29856,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "VX" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/monotile, @@ -29847,10 +29877,10 @@ /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Wg" = ( /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Wh" = ( /obj/effect/floor_decal/carpet, /obj/effect/floor_decal/carpet{ @@ -29886,14 +29916,14 @@ id_tag = "shuttlesens_exp_int" }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Wo" = ( /obj/structure/bed/chair/shuttle, /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Wr" = ( /obj/structure/table/standard, /obj/item/weapon/towel/random, @@ -29909,7 +29939,7 @@ "Ws" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Wv" = ( /obj/machinery/alarm{ dir = 4; @@ -29938,7 +29968,7 @@ }, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "WB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -29957,7 +29987,7 @@ "WD" = ( /obj/structure/flight_right, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "WE" = ( /obj/effect/decal/remains, /obj/item/clothing/under/rank/centcom_officer, @@ -29983,7 +30013,7 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "WH" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -30007,7 +30037,7 @@ "WR" = ( /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "WS" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -30019,7 +30049,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "WY" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/dark, @@ -30032,13 +30062,13 @@ }, /obj/structure/handrail, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xc" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -30060,7 +30090,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xe" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -30081,7 +30111,7 @@ icon_state = "intact" }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xk" = ( /obj/structure/cable/cyan{ d2 = 4; @@ -30101,7 +30131,7 @@ req_access = list(67) }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xl" = ( /obj/structure/cable/cyan{ d1 = 4; @@ -30115,11 +30145,11 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xo" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xp" = ( /obj/structure/cable/cyan{ d2 = 8; @@ -30127,7 +30157,7 @@ }, /obj/machinery/power/smes/buildable/point_of_interest, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Xq" = ( /obj/structure/stasis_cage, /turf/simulated/floor/tiled/monotile, @@ -30135,7 +30165,7 @@ "Xr" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/yellow, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "XA" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/reinforced{ @@ -30145,7 +30175,7 @@ dir = 6 }, /turf/simulated/floor/reinforced, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "XB" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/reinforced{ @@ -30155,20 +30185,20 @@ dir = 10 }, /turf/simulated/floor/reinforced, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "XC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 5 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "XE" = ( /obj/machinery/conveyor_switch/oneway{ id = "shuttle_inbound" }, /obj/effect/floor_decal/industrial/warning/full, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "XG" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, @@ -30186,7 +30216,7 @@ dir = 1 }, /turf/simulated/floor/reinforced, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "XO" = ( /obj/structure/cable/green{ d1 = 2; @@ -30224,7 +30254,7 @@ my_sensors = list("shuttlesens_exp" = "Exterior Environment", "shuttlesens_exp_int" = "Cargo Area", "shuttlesens_exp_psg" = "Passenger Area") }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Yb" = ( /turf/simulated/floor/wood, /area/crew_quarters/heads/cmo) @@ -30240,7 +30270,7 @@ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Yh" = ( /obj/structure/sink{ dir = 4; @@ -30270,7 +30300,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Ym" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -30279,7 +30309,7 @@ icon_state = "intact" }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Yp" = ( /turf/simulated/wall{ can_open = 0 @@ -30376,7 +30406,7 @@ /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Zd" = ( /obj/machinery/conveyor{ dir = 4; @@ -30384,7 +30414,7 @@ }, /obj/structure/plasticflaps, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Zi" = ( /obj/machinery/alarm{ dir = 1; @@ -30403,7 +30433,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Zn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30420,7 +30450,7 @@ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "Zp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ icon_state = "intact-scrubbers"; @@ -30455,20 +30485,20 @@ dir = 4 }, /turf/simulated/floor/plating, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZB" = ( /obj/machinery/shuttle_sensor{ dir = 5; id_tag = "shuttlesens_exp" }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 9 }, /turf/simulated/wall/rshull, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZE" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -30493,7 +30523,7 @@ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZF" = ( /turf/simulated/mineral/vacuum, /area/crew_quarters/heads/hos) @@ -30510,7 +30540,7 @@ }, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/steel_ridged, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZM" = ( /obj/structure/table/woodentable, /obj/item/device/radio/off, @@ -30544,7 +30574,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZU" = ( /obj/machinery/suit_cycler/pilot, /obj/machinery/firealarm{ @@ -30553,7 +30583,7 @@ pixel_y = -26 }, /turf/simulated/floor/tiled, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30570,7 +30600,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZX" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -30578,7 +30608,7 @@ /obj/machinery/portable_atmospherics/canister/air, /obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor/grid, -/area/shuttle/excursion/tether) +/area/shuttle/excursion) "ZY" = ( /turf/simulated/wall/r_wall, /area/security/security_lockerroom) @@ -45281,17 +45311,17 @@ vt vt vt vt -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg ae ae aa @@ -45423,18 +45453,18 @@ aa aa aa ae -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg ae aa aa @@ -45565,18 +45595,18 @@ aa aa aa ae -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg ae aa aa @@ -45707,17 +45737,17 @@ aa aa aa ae -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg CS ae aa @@ -45849,18 +45879,18 @@ aa aa aa aa -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg ae aa aa @@ -45991,18 +46021,18 @@ aa aa aa aa -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg ae aa aa @@ -46133,17 +46163,17 @@ aa aa aa aa -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS -CS +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg ae ae aa @@ -46395,16 +46425,16 @@ aa aa aa aa -lY -lY -lY -lY -lY -lY -lY -lY -lY -lY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -46537,16 +46567,16 @@ aa aa aa aa -lY -lY -lY -lY -lY -lY -lY -lY -lY -lY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -46679,15 +46709,15 @@ aa aa aa aa -lY -lY -lY -lY -lY -lY -lY -lY -lY +aa +aa +aa +aa +aa +aa +aa +aa +aa lY aa aa @@ -46821,16 +46851,16 @@ aa aa aa aa -lY -lY -lY -lY -lY -lY -lY -lY -lY -lY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -46963,16 +46993,16 @@ aa aa aa aa -lY -lY -lY -lY -lY -lY -lY -lY -lY -lY +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa diff --git a/maps/tether/tether-08-mining.dmm b/maps/tether/tether-08-mining.dmm index 77be73e6c9..1924ae31b5 100644 --- a/maps/tether/tether-08-mining.dmm +++ b/maps/tether/tether-08-mining.dmm @@ -13,7 +13,7 @@ /area/shuttle/tether/crash2) "ae" = ( /turf/simulated/floor/outdoors/grass/sif/virgo3b, -/area/shuttle/antag_ground/mining) +/area/shuttle/antag_ground) "af" = ( /obj/effect/floor_decal/rust, /turf/simulated/floor/tiled/steel_dirty/virgo3b, diff --git a/maps/tether/tether-09-solars.dmm b/maps/tether/tether-09-solars.dmm index 84ca1ea2c3..5b59118b77 100644 --- a/maps/tether/tether-09-solars.dmm +++ b/maps/tether/tether-09-solars.dmm @@ -7,7 +7,7 @@ /area/mine/explored) "ac" = ( /turf/simulated/floor/outdoors/grass/sif/virgo3b, -/area/shuttle/antag_ground/solars) +/area/shuttle/antag_ground) "ad" = ( /turf/simulated/floor/outdoors/dirt/virgo3b, /area/mine/explored) @@ -847,10 +847,14 @@ /turf/simulated/floor/outdoors/dirt/virgo3b, /area/shuttle/tether/crash1) "bO" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/mine/explored; + base_turf = /turf/simulated/floor/outdoors/dirt/virgo3b; + landmark_tag = "merc_tether_solars"; + name = "Tether Solar Farm" + }, /turf/simulated/floor/outdoors/dirt/virgo3b, -/area/syndicate_station/mining{ - base_turf = /turf/simulated/floor/outdoors/dirt/virgo3b - }) +/area/mine/explored) "bP" = ( /obj/structure/symbol/em, /turf/simulated/wall, @@ -20846,18 +20850,18 @@ ad ad ad ad -bO -bO -bO ad -bO -bO -bO -bO ad -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -20987,20 +20991,20 @@ ab ad ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -21128,22 +21132,22 @@ ad ad ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -21270,22 +21274,22 @@ ad ad ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -21412,22 +21416,22 @@ ad ad ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -21553,24 +21557,24 @@ ab ad ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad bp @@ -21694,26 +21698,26 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -21836,26 +21840,26 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -21978,26 +21982,26 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -22120,26 +22124,26 @@ ab ab ab ad +ad bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -22262,26 +22266,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -22404,26 +22408,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -22546,26 +22550,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -22688,26 +22692,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -22831,24 +22835,24 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad bp @@ -22974,22 +22978,22 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -23116,22 +23120,22 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -23258,22 +23262,22 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -23399,24 +23403,24 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad bp @@ -23540,26 +23544,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -23682,26 +23686,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -23824,26 +23828,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -23966,26 +23970,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -24108,26 +24112,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -24250,26 +24254,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bp bj @@ -24392,26 +24396,26 @@ ab ab ab ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad bt bI @@ -24534,26 +24538,26 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -24676,26 +24680,26 @@ ab ab ad ad -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -24819,24 +24823,24 @@ ab ad ad ad -bO -bO -bO -bO -bO -bO -bO ad ad ad ad -bO -bO -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -24962,22 +24966,22 @@ ad ad ad ad -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad ad ad ab ad ad ad -bO -bO -bO -bO -bO +ad +ad +ad +ad +ad ad ad ad @@ -25105,9 +25109,9 @@ ad ad ad ad -bO -bO -bO +ad +ad +ad ad ad ab @@ -25116,9 +25120,9 @@ ab ab ab ad -bO -bO -bO +ad +ad +ad ad ad ad diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm index ca1f8b2299..6e621e27e9 100644 --- a/maps/tether/tether-10-colony.dmm +++ b/maps/tether/tether-10-colony.dmm @@ -370,6 +370,12 @@ locked = 1; name = "Forward Docking Hatch" }, +/obj/effect/shuttle_landmark{ + base_area = /area/centcom/specops; + base_turf = /turf/unsimulated/floor; + landmark_tag = "specops_base"; + name = "Central Command" + }, /turf/simulated/shuttle/plating, /area/shuttle/specialops/centcom) "aG" = ( @@ -5097,26 +5103,25 @@ dir = 9 }, /turf/unsimulated/floor/steel, -/area/shuttle/large_escape_pod1/centcom{ - base_turf = /turf/simulated/floor/tiled/steel_dirty/virgo3b - }) +/area/centcom/evac) "jw" = ( /obj/effect/floor_decal/rust/part_rusted3, /turf/unsimulated/floor/steel, -/area/shuttle/large_escape_pod1/centcom{ - base_turf = /turf/simulated/floor/tiled/steel_dirty/virgo3b - }) +/area/centcom/evac) "jx" = ( +/obj/effect/shuttle_landmark{ + base_area = /area/centcom/evac; + base_turf = /turf/unsimulated/floor/steel; + docking_controller = null; + landmark_tag = "escapepod1_cc"; + name = "Centcom Recovery Area" + }, /turf/unsimulated/floor/steel, -/area/shuttle/large_escape_pod1/centcom{ - base_turf = /turf/simulated/floor/tiled/steel_dirty/virgo3b - }) +/area/centcom/evac) "jy" = ( /obj/effect/floor_decal/rust, /turf/unsimulated/floor/steel, -/area/shuttle/large_escape_pod1/centcom{ - base_turf = /turf/simulated/floor/tiled/steel_dirty/virgo3b - }) +/area/centcom/evac) "jz" = ( /obj/machinery/door/airlock/alien/blue/public, /turf/simulated/shuttle/floor/alienplating, @@ -5258,9 +5263,7 @@ "jJ" = ( /obj/effect/floor_decal/rust/mono_rusted3, /turf/unsimulated/floor/steel, -/area/shuttle/large_escape_pod1/centcom{ - base_turf = /turf/simulated/floor/tiled/steel_dirty/virgo3b - }) +/area/centcom/evac) "jK" = ( /turf/unsimulated/wall, /area/centcom/medical) @@ -5276,9 +5279,7 @@ "jM" = ( /obj/effect/floor_decal/corner_steel_grid/diagonal, /turf/unsimulated/floor/steel, -/area/shuttle/large_escape_pod1/centcom{ - base_turf = /turf/simulated/floor/tiled/steel_dirty/virgo3b - }) +/area/centcom/evac) "jN" = ( /obj/effect/floor_decal/sign/dock/two, /obj/effect/floor_decal/industrial/warning/dust{ @@ -9945,16 +9946,12 @@ /area/centcom/security) "si" = ( /turf/simulated/shuttle/wall, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sj" = ( /obj/structure/grille, /obj/structure/shuttle/window, /turf/simulated/shuttle/plating, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sk" = ( /obj/structure/table/woodentable{ dir = 5 @@ -10111,9 +10108,7 @@ /area/centcom/security) "sB" = ( /turf/simulated/shuttle/wall/hard_corner, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sC" = ( /obj/structure/closet/hydrant{ pixel_x = -30; @@ -10130,24 +10125,18 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sD" = ( /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sE" = ( /obj/structure/bed/chair/shuttle, /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sF" = ( /obj/structure/bed/chair{ dir = 8 @@ -10350,17 +10339,13 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sX" = ( /obj/structure/table/standard, /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sY" = ( /obj/machinery/status_display{ pixel_y = 30 @@ -10372,9 +10357,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "sZ" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/cups, @@ -10563,9 +10546,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "tm" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 4 @@ -10742,9 +10723,7 @@ name = "Shuttle Hatch" }, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "tC" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -10754,9 +10733,7 @@ name = "Shuttle Hatch" }, /turf/simulated/shuttle/floor/yellow, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "tD" = ( /obj/structure/table/glass, /obj/item/roller, @@ -10983,9 +10960,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "ub" = ( /obj/structure/bed/chair/shuttle, /obj/structure/closet/walllocker/emerglocker{ @@ -10994,9 +10969,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "uc" = ( /obj/structure/closet/secure_closet/personal, /turf/simulated/shuttle/floor/alien, @@ -11064,18 +11037,14 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "un" = ( /obj/structure/table/standard, /obj/random/maintenance/clean, /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "uo" = ( /obj/structure/flora/pottedplant{ icon_state = "plant-22" @@ -11315,10 +11284,15 @@ /area/centcom/living) "uP" = ( /obj/structure/sign/nanotrasen, +/obj/effect/shuttle_landmark{ + base_area = /area/centcom/terminal; + base_turf = /turf/simulated/floor/tiled/techfloor/grid; + docking_controller = null; + landmark_tag = "escape_cc"; + name = "Escape Transit" + }, /turf/simulated/shuttle/wall, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "uQ" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 8 @@ -11441,18 +11415,14 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "vc" = ( /obj/structure/table/standard, /obj/random/plushie, /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "vd" = ( /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ @@ -11556,9 +11526,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "vl" = ( /obj/structure/bed/chair/shuttle{ dir = 1 @@ -11569,9 +11537,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "vm" = ( /turf/unsimulated/wall, /area/centcom/security{ @@ -12145,17 +12111,13 @@ /obj/structure/grille, /obj/structure/shuttle/window, /turf/simulated/shuttle/floor/white, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "wg" = ( /obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "wh" = ( /obj/machinery/computer/card{ dir = 4 @@ -12470,18 +12432,14 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "wD" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/machinery/light, /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "wE" = ( /obj/machinery/computer/secure_data{ dir = 4 @@ -12760,9 +12718,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "xa" = ( /obj/structure/bed/chair/shuttle{ dir = 1 @@ -12771,9 +12727,7 @@ /turf/simulated/shuttle/floor/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/escape) "xb" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 10 @@ -25395,6 +25349,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techmaint, /area/mothership/warden) +"WS" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/shuttle/wall, +/area/shuttle/escape) "WT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -38161,7 +38119,7 @@ tB si sj uP -uP +WS sj si tB @@ -39154,8 +39112,8 @@ sj tC si sj -uP -uP +WS +WS sj si tC @@ -42282,10 +42240,10 @@ nm nm jl jv -jx -jx -jx -jx +nm +nm +nm +nm iF nm mQ @@ -42424,10 +42382,10 @@ OI Ku ju jw -jx +nm jy jy -jx +nm iF nm mQ @@ -42565,11 +42523,11 @@ iF Sj YG ju -jx +nm jJ -jx -jx -jx +nm +nm +nm iF nm mQ @@ -42707,10 +42665,10 @@ iF Sv Tp ju -jx -jx -jx -jx +nm +nm +nm +nm jM iF nm @@ -42849,11 +42807,11 @@ iF QZ TC ju -jx +nm jy -jx -jx -jx +nm +nm +nm YL nm mQ @@ -42991,11 +42949,11 @@ iF Ht Ev ju -jx -jx -jx -jx -jx +nm +nm +nm +nm +nm iF nm mQ @@ -43134,10 +43092,10 @@ Si Fp ju jy -jx -jx -jx -jx +nm +nm +nm +nm iF nm mQ @@ -43275,10 +43233,10 @@ iF KY Ur ju -jx -jx +nm +nm jM -jx +nm jy iO nm @@ -43417,11 +43375,11 @@ iF Vi ZJ ju -jx -jx -jx -jx -jx +nm +nm +nm +nm +nm iF nm mQ @@ -43559,11 +43517,11 @@ iO nm nm ju -jx +nm jy -jx -jx -jx +nm +nm +nm iF nm mQ @@ -43701,10 +43659,10 @@ iF nm nm ju -jx -jx -jx -jx +nm +nm +nm +nm jM iF nm @@ -43844,9 +43802,9 @@ nm nm hb ha +nm jx -jx -jx +nm iz iP nm diff --git a/maps/tether/tether_areas2.dm b/maps/tether/tether_areas2.dm index b4fdfad037..7e8e64ca13 100644 --- a/maps/tether/tether_areas2.dm +++ b/maps/tether/tether_areas2.dm @@ -783,8 +783,15 @@ /area/bridge/secondary name = "\improper Secondary Command Office" + +/area/bridge/secondary/hallway + name = "\improper Secondary Command Hallway" /area/bridge/secondary/meeting_room name = "\improper Secondary Command Meeting Room" + lightswitch = 0 +/area/bridge/secondary/teleporter + name = "\improper Secondary Teleporter" + lightswitch = 0 /area/tether/station/visitorhallway name = "\improper Visitor Hallway" @@ -839,6 +846,9 @@ name = "\improper Secondary Command Maintenance" icon_state = "bridge" sound_env = SEWER_PIPE +/area/maintenance/substation/spacecommand + name = "\improper Secondary Command Substation" + icon_state = "substation" /area/shuttle/tether/crash1 name = "\improper Crash Site 1" @@ -876,43 +886,19 @@ /area/shuttle/excursion name = "\improper Excursion Shuttle" icon_state = "shuttle2" - base_turf = /turf/space requires_power = 1 -/area/shuttle/excursion/tether - name = "\improper Excursion Shuttle - Tether" - base_turf = /turf/simulated/floor/reinforced - -/area/shuttle/excursion/tether_nearby - name = "\improper Excursion Shuttle - Tether Near" - -/area/shuttle/excursion/tether_dockarm - name = "\improper Excursion Shuttle - Tether Arm" - -/area/shuttle/excursion/space - name = "\improper Excursion Shuttle - Space" - -/area/shuttle/excursion/space_moving - name = "\improper Excursion Shuttle - Space Moving" - base_turf = /turf/space/transit/north - -/area/shuttle/excursion/bluespace - name = "\improper Excursion Shuttle - Bluespace" - base_turf = /turf/space/bluespace - -/area/shuttle/excursion/sand_moving - name = "\improper Excursion Shuttle - Sand Transit" - base_turf = /turf/space/sandyscroll - -/area/shuttle/excursion/virgo3b_sky - name = "\improper Excursion Shuttle - Virgo3b Sky" - base_turf = /turf/simulated/sky/virgo3b/south +/area/shuttle/blue_fo + name = "\improper Hybrid Shuttle" + icon_state = "shuttle2" + requires_power = 1 // Belter Dock /area/quartermaster/belterdock name = "\improper Cargo Belter Access" icon_state = "mining" + // Elevator area // /area/tether/elevator @@ -933,34 +919,30 @@ requires_power = 0 dynamic_lighting = 0 -/area/shuttle/antag_space/base - name = "\improper Syndicate PS - Base" - icon_state = "shuttle2" -/area/shuttle/antag_space/transit - name = "\improper Syndicate PS - Transit" - icon_state = "shuttle2" -/area/shuttle/antag_space/north - name = "\improper Syndicate PS - Nearby" - icon_state = "shuttle2" -/area/shuttle/antag_space/docks - name = "\improper Syndicate PS - Docks" +//Antag space shuttle +/area/shuttle/antag_space + name = "\improper Syndicate PS" icon_state = "shuttle2" -/area/shuttle/antag_ground/base - name = "\improper Syndicate LC - Base" +//Antag ground 'shuttle' +/area/shuttle/antag_ground + name = "\improper Syndicate LC" icon_state = "shuttle2" -/area/shuttle/antag_ground/transit - name = "\improper Syndicate LC - Transit" - icon_state = "shuttle2" -/area/shuttle/antag_ground/solars - name = "\improper Syndicate LC - Solars" - icon_state = "shuttle2" - base_turf = /turf/simulated/floor/outdoors/dirt/virgo3b -/area/shuttle/antag_ground/mining - name = "\improper Syndicate LC - Mining" - icon_state = "shuttle2" - base_turf = /turf/simulated/floor/outdoors/dirt/virgo3b +//Merc shuttle +/area/shuttle/mercenary + name = "\improper Mercenary Shuttle" + icon_state = "shuttle2" + +//Vox shuttle +/area/shuttle/skipjack + name = "\improper Skipjack" + icon_state = "shuttle2" + +//Ninja shuttle +/area/shuttle/ninja + name = "\improper Ninjacraft" + icon_state = "shuttle2" //TFF 28/8/19 - cleanup of areas placement /area/teleporter/departing @@ -1231,17 +1213,8 @@ base_turf = /turf/space/transit/east // Tether Map has this shuttle -/area/shuttle/tether/surface - name = "Tether Shuttle Landed" - icon_state = "shuttle" - base_turf = /turf/simulated/floor/reinforced - -/area/shuttle/tether/station - name = "Tether Shuttle Dock" - icon_state = "shuttle2" - -/area/shuttle/tether/transit - name = "Tether Shuttle Transit" +/area/shuttle/tether + name = "Tether Shuttle" icon_state = "shuttle2" //Skipjack diff --git a/maps/tether/tether_phoronlock.dm b/maps/tether/tether_phoronlock.dm index 32da78702c..cddc6e256c 100644 --- a/maps/tether/tether_phoronlock.dm +++ b/maps/tether/tether_phoronlock.dm @@ -146,12 +146,9 @@ obj/machinery/airlock_sensor/phoron/airlock_exterior ui.set_auto_update(1) /obj/machinery/embedded_controller/radio/airlock/phoron/Topic(href, href_list) - if(..()) + if((. = ..())) return - usr.set_machine(src) - src.add_fingerprint(usr) - var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks if("cycle_ext") diff --git a/maps/tether/tether_shuttle_defs.dm b/maps/tether/tether_shuttle_defs.dm index 5c0e383f8c..cf1e25d364 100644 --- a/maps/tether/tether_shuttle_defs.dm +++ b/maps/tether/tether_shuttle_defs.dm @@ -1,175 +1,126 @@ ////////////////////////////////////////////////////////////// // Escape shuttle and pods -/datum/shuttle/ferry/emergency/escape +/datum/shuttle/autodock/ferry/emergency/escape name = "Escape" - location = 1 // At offsite + location = FERRY_LOCATION_OFFSITE + shuttle_area = /area/shuttle/escape warmup_time = 10 - area_offsite = /area/shuttle/escape/centcom - area_station = /area/shuttle/escape/station - area_transition = /area/shuttle/escape/transit - docking_controller_tag = "escape_shuttle" - dock_target_station = "escape_dock" - dock_target_offsite = "centcom_dock" + landmark_offsite = "escape_cc" + landmark_station = "escape_station" + landmark_transition = "escape_transit" + //docking_controller_tag = "escape_shuttle" + //dock_target_station = "escape_dock" + //dock_target_offsite = "centcom_dock" move_time = SHUTTLE_TRANSIT_DURATION_RETURN ////////////////////////////////////////////////////////////// -/datum/shuttle/ferry/escape_pod/large_escape_pod1 +/datum/shuttle/autodock/ferry/escape_pod/large_escape_pod1 name = "Large Escape Pod 1" - location = 0 + location = FERRY_LOCATION_STATION + shuttle_area = /area/shuttle/large_escape_pod1 warmup_time = 0 - area_station = /area/shuttle/large_escape_pod1/station - area_offsite = /area/shuttle/large_escape_pod1/centcom - area_transition = /area/shuttle/large_escape_pod1/transit + landmark_station = "escapepod1_station" + landmark_offsite = "escapepod1_cc" + landmark_transition = "escapepod1_transit" docking_controller_tag = "large_escape_pod_1" - dock_target_station = "large_escape_pod_1_berth" - dock_target_offsite = "large_escape_pod_1_recovery" + //dock_target_station = "large_escape_pod_1_berth" + //dock_target_offsite = "large_escape_pod_1_recovery" move_time = SHUTTLE_TRANSIT_DURATION_RETURN -////////////////////////////////////////////////////////////// -/* Removed for the time being -/datum/shuttle/ferry/escape_pod/large_escape_pod2 - name = "Large Escape Pod 2" - location = 0 - warmup_time = 0 - area_station = /area/shuttle/large_escape_pod2/station - area_offsite = /area/shuttle/large_escape_pod2/centcom - area_transition = /area/shuttle/large_escape_pod2/transit - docking_controller_tag = "large_escape_pod_2" - dock_target_station = "large_escape_pod_2_berth" - dock_target_offsite = "large_escape_pod_2_recovery" - move_time = SHUTTLE_TRANSIT_DURATION_RETURN -*/ ////////////////////////////////////////////////////////////// // Supply shuttle -/datum/shuttle/ferry/supply/cargo +/datum/shuttle/autodock/ferry/supply/cargo name = "Supply" - location = 1 + location = FERRY_LOCATION_OFFSITE + shuttle_area = /area/shuttle/supply warmup_time = 10 - area_offsite = /area/supply/dock - area_station = /area/supply/station + landmark_offsite = "supply_cc" + landmark_station = "supply_station" docking_controller_tag = "supply_shuttle" - dock_target_station = "cargo_bay" + //dock_target_station = "cargo_bay" flags = SHUTTLE_FLAGS_PROCESS|SHUTTLE_FLAGS_SUPPLY ////////////////////////////////////////////////////////////// // Trade Ship -/datum/shuttle/ferry/trade +/datum/shuttle/autodock/ferry/trade name = "Trade" - location = 1 + location = FERRY_LOCATION_OFFSITE + shuttle_area = /area/shuttle/trade warmup_time = 10 //want some warmup time so people can cancel. - area_offsite = /area/shuttle/trade/centcom - area_station = /area/shuttle/trade/station + landmark_offsite = "trade_cc" + landmark_station = "trade_station" docking_controller_tag = "trade_shuttle" - dock_target_station = "trade_shuttle_dock_airlock" - dock_target_offsite = "trade_shuttle_bay" - -////////////////////////////////////////////////////////////// -// Away Mission Shuttle -// TODO - Not implemented yet on new map -/* -/datum/shuttle/multi_shuttle/awaymission - name = "AwayMission" - legit = TRUE - warmup_time = 8 - move_time = 60 - origin = /area/shuttle/awaymission/home - interim = /area/shuttle/awaymission/warp - start_location = "NSB Adephagia (AM)" - destinations = list( - "Old Engineering Base (AM)" = /area/shuttle/awaymission/oldengbase - ) - docking_controller_tag = "awaymission_shuttle" - destination_dock_targets = list( - "NSB Adephagia (AM)" = "d1a2_dock_airlock" - ) - announcer = "Automated Traffic Control" - //These seem backwards because they are written from the perspective of the merc and vox ships - departure_message = "Attention. The away mission vessel is approaching the colony." - arrival_message = "Attention. The away mission vessel is now leaving from the colony." - -/datum/shuttle/multi_shuttle/awaymission/New() - ..() - var/area/awaym_dest = locate(/area/shuttle/awaymission/away) - if(awaym_dest && awaym_dest.contents.len) // Otherwise this is an empty imaginary area - destinations["Unknown Location [rand(1000,9999)]"] = awaym_dest - -*/ + //dock_target_station = "trade_shuttle_dock_airlock" + //dock_target_offsite = "trade_shuttle_bay" ////////////////////////////////////////////////////////////// // Tether Shuttle -/datum/shuttle/ferry/tether_backup +/datum/shuttle/autodock/ferry/tether_backup name = "Tether Backup" - location = 1 // At offsite + location = FERRY_LOCATION_OFFSITE //Offsite is the surface hangar warmup_time = 5 move_time = 45 - area_offsite = /area/shuttle/tether/surface - area_station = /area/shuttle/tether/station - area_transition = /area/shuttle/tether/transit - crash_areas = list(/area/shuttle/tether/crash1, /area/shuttle/tether/crash2) + landmark_offsite = "tether_backup_low" + landmark_station = "tether_backup_high" + landmark_transition = "tether_backup_transit" + shuttle_area = /area/shuttle/tether + //crash_areas = list(/area/shuttle/tether/crash1, /area/shuttle/tether/crash2) docking_controller_tag = "tether_shuttle" - dock_target_station = "tether_dock_airlock" - dock_target_offsite = "tether_pad_airlock" + //dock_target_station = "tether_dock_airlock" + //dock_target_offsite = "tether_pad_airlock" ////////////////////////////////////////////////////////////// // Antag Space "Proto Shuttle" Shuttle -/datum/shuttle/multi_shuttle/protoshuttle +/datum/shuttle/autodock/multi/protoshuttle name = "Proto" warmup_time = 8 move_time = 60 - origin = /area/shuttle/antag_space/base - interim = /area/shuttle/antag_space/transit - start_location = "Home Base" - destinations = list( - "Nearby" = /area/shuttle/antag_space/north, - "Docks" = /area/shuttle/antag_space/docks + current_location = "antag_space_base" + shuttle_area = /area/shuttle/antag_space + landmark_transition = "antag_space_transit" + destination_tags = list( + "antag_space_nearby", + "antag_space_docks" + //"Nearby" = /area/shuttle/antag_space/north, + //"Docks" = /area/shuttle/antag_space/docks ) docking_controller_tag = "antag_space_shuttle" - destination_dock_targets = list("Home Base" = "antag_space_dock") + //destination_dock_targets = list("Home Base" = "antag_space_dock") ////////////////////////////////////////////////////////////// // Antag Surface "Land Crawler" Shuttle -/datum/shuttle/multi_shuttle/landcrawler +/datum/shuttle/autodock/multi/landcrawler name = "Land Crawler" warmup_time = 8 move_time = 60 - origin = /area/shuttle/antag_ground/base - interim = /area/shuttle/antag_ground/transit - start_location = "Home Base" - destinations = list( - "Solar Array" = /area/shuttle/antag_ground/solars, - "Mining Outpost" = /area/shuttle/antag_ground/mining + current_location = "antag_ground_base" + shuttle_area = /area/shuttle/antag_ground + landmark_transition = "antag_ground_transit" + destination_tags = list( + "antag_ground_solars", + "antag_ground_mining" + //"Solar Array" = /area/shuttle/antag_ground/solars, + //"Mining Outpost" = /area/shuttle/antag_ground/mining ) docking_controller_tag = "antag_ground_shuttle" - destination_dock_targets = list("Home Base" = "antag_ground_dock") ////////////////////////////////////////////////////////////// // Mercenary Shuttle -/datum/shuttle/multi_shuttle/mercenary +/datum/shuttle/autodock/multi/mercenary name = "Mercenary" warmup_time = 8 move_time = 60 - origin = /area/syndicate_station/start - //interim = /area/syndicate_station/transit // Disabled until this even exists. - start_location = "Mercenary base" - destinations = list( - //"Northwest of the station" = /area/syndicate_station/northwest, - //"North of the station" = /area/syndicate_station/north, - //"Northeast of the station" = /area/syndicate_station/northeast, - //"(Land) Southwest of Tether" = /area/syndicate_station/southwest, - //"South of the station" = /area/syndicate_station/south, - //"Southeast of the station" = /area/syndicate_station/southeast, - //"Telecomms Satellite" = /area/syndicate_station/commssat, - "(Land) Solar farm west of Tether" = /area/syndicate_station/mining, - "Tether spaceport" = /area/syndicate_station/arrivals_dock + current_location = "merc_base" + shuttle_area = /area/shuttle/mercenary + destination_tags = list( + "merc_base", + "merc_tether_solars", + "merc_tether_dock" ) docking_controller_tag = "merc_shuttle" - destination_dock_targets = list( - "Mercenary base" = "merc_base", - "Tether spaceport" = "nuke_shuttle_dock_airlock", - ) announcer = "Automated Traffic Control" -/datum/shuttle/multi_shuttle/mercenary/New() +/datum/shuttle/autodock/multi/mercenary/New() arrival_message = "Attention. An unregistered vessel is approaching Virgo-3B." departure_message = "Attention. A unregistered vessel is now leaving Virgo-3B." ..() @@ -177,33 +128,19 @@ ////////////////////////////////////////////////////////////// // RogueMiner "Belter: Shuttle -/datum/shuttle/ferry/belter +/datum/shuttle/autodock/ferry/belter name = "Belter" - location = 0 + location = FERRY_LOCATION_STATION warmup_time = 5 move_time = 30 - area_station = /area/shuttle/belter/station - area_offsite = /area/shuttle/belter/belt/zone1 - area_transition = /area/shuttle/belter/transit + shuttle_area = /area/shuttle/belter + landmark_station = "belter_station" + landmark_offsite = "belter_zone1" + landmark_transition = "belter_transit" docking_controller_tag = "belter_docking" - dock_target_station = "belter_nodocking" //Fake tags to prevent the shuttle from opening doors. - dock_target_offsite = "belter_nodocking" + //dock_target_station = "belter_nodocking" //Fake tags to prevent the shuttle from opening doors. + //dock_target_offsite = "belter_nodocking" -/datum/shuttle/ferry/belter/New() - move_time = move_time + rand(-5, 5) +/datum/shuttle/autodock/ferry/belter/New() + move_time = move_time + rand(-5 SECONDS, 5 SECONDS) ..() - - -////////////////////////////////////////////////////////////// -// CC Lewdship shuttle -/* -/datum/shuttle/ferry/cruiser_shuttle - name = "Cruiser Shuttle" - location = 1 - warmup_time = 10 //want some warmup time so people can cancel. - area_offsite = /area/shuttle/cruiser/cruiser - area_station = /area/shuttle/cruiser/station - docking_controller_tag = "cruiser_shuttle" - dock_target_station = "d1a1_dock" - dock_target_offsite = "cruiser_shuttle_bay" -*/ \ No newline at end of file diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm index 77259f8119..65926e2c92 100644 --- a/maps/tether/tether_shuttles.dm +++ b/maps/tether/tether_shuttles.dm @@ -24,20 +24,17 @@ // "Tram" Emergency Shuttler // Becuase the tram only has its own doors and no corresponding station doors, a docking controller is overkill. // Just open the gosh darn doors! Also we avoid having a physical docking controller obj for gameplay reasons. -/datum/shuttle/ferry/emergency +/datum/shuttle/autodock/ferry/emergency var/tag_door_station = "escape_shuttle_hatch_station" var/tag_door_offsite = "escape_shuttle_hatch_offsite" var/frequency = 1380 // Why this frequency? BECAUSE! Thats what someone decided once. var/datum/radio_frequency/radio_connection -/datum/shuttle/ferry/emergency/init_docking_controllers() - docking_controller_tag = null - dock_target_station = null - dock_target_offsite = null +/datum/shuttle/autodock/ferry/emergency/New() radio_connection = radio_controller.add_object(src, frequency, null) ..() -/datum/shuttle/ferry/emergency/dock() +/datum/shuttle/autodock/ferry/emergency/dock() ..() // Open Doorsunes var/datum/signal/signal = new @@ -45,7 +42,7 @@ signal.data["command"] = "secure_open" post_signal(signal) -/datum/shuttle/ferry/emergency/undock() +/datum/shuttle/autodock/ferry/emergency/undock() ..() // Close Doorsunes var/datum/signal/signal = new @@ -53,7 +50,7 @@ signal.data["command"] = "secure_close" post_signal(signal) -/datum/shuttle/ferry/emergency/proc/post_signal(datum/signal/signal, var/filter = null) +/datum/shuttle/autodock/ferry/emergency/proc/post_signal(datum/signal/signal, var/filter = null) signal.transmission_method = TRANSMISSION_RADIO if(radio_connection) return radio_connection.post_signal(src, signal, filter) @@ -185,30 +182,32 @@ . = ..() -/datum/shuttle/web_shuttle/excursion +/datum/shuttle/autodock/web_shuttle/excursion name = "Excursion Shuttle" warmup_time = 0 - current_area = /area/shuttle/excursion/tether + current_location = "tether_excursion_hangar" docking_controller_tag = "expshuttle_docker" web_master_type = /datum/shuttle_web_master/excursion + shuttle_area = /area/shuttle/excursion var/abduct_chance = 0 //Prob -/datum/shuttle/web_shuttle/excursion/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction) +/datum/shuttle/autodock/web_shuttle/excursion/long_jump(var/obj/effect/shuttle_landmark/destination, var/obj/effect/shuttle_landmark/interim, var/travel_time) if(prob(abduct_chance)) abduct_chance = 0 var/list/occupants = list() - for(var/mob/living/L in departing) - occupants += key_name(L) + for(var/area/A in shuttle_area) + for(var/mob/living/L in A) + occupants += key_name(L) log_and_message_admins("Shuttle abduction occuring with (only mobs on turfs): [english_list(occupants)]") //Build the route to the alien ship var/obj/shuttle_connector/alienship/ASC = new /obj/shuttle_connector/alienship(null) ASC.setup_routes() //Redirect us onto that route instead - var/datum/shuttle/web_shuttle/WS = shuttle_controller.shuttles[name] + var/datum/shuttle/autodock/web_shuttle/WS = shuttle_controller.shuttles[name] var/datum/shuttle_destination/ASD = WS.web_master.get_destination_by_type(/datum/shuttle_destination/excursion/alienship) WS.web_master.future_destination = ASD - . = ..(departing,ASD.my_area,interim,travel_time,direction) + . = ..(ASD.my_landmark,interim,travel_time) else . = ..() @@ -218,11 +217,10 @@ /datum/shuttle_destination/excursion/tether name = "NSB Adephagia Excursion Hangar" - my_area = /area/shuttle/excursion/tether + my_landmark = "tether_excursion_hangar" - dock_target = "expshuttle_dock" radio_announce = 1 - announcer = "Excursion Shuttle" + announcer = "Docking System" routes_to_make = list( /datum/shuttle_destination/excursion/outside_tether = 0, @@ -237,8 +235,8 @@ /datum/shuttle_destination/excursion/outside_tether name = "Nearby NSB Adephagia" - my_area = /area/shuttle/excursion/tether_nearby - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_nearby" + preferred_interim_tag = "tether_excursion_transit_space" routes_to_make = list( /datum/shuttle_destination/excursion/docked_tether = 0, @@ -248,11 +246,10 @@ /datum/shuttle_destination/excursion/docked_tether name = "NSB Adephagia Docking Arm" - my_area = /area/shuttle/excursion/tether_dockarm + my_landmark = "tether_excursion_dockarm" - dock_target = "d1a2_dock" radio_announce = 1 - announcer = "Excursion Shuttle" + announcer = "Docking System" /datum/shuttle_destination/excursion/docked_tether/get_arrival_message() return "Attention, [master.my_shuttle.visible_name] has arrived at Docking Arm One." @@ -263,8 +260,8 @@ /datum/shuttle_destination/excursion/virgo3b_orbit name = "Virgo 3B Orbit" - my_area = /area/shuttle/excursion/space - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_space" + preferred_interim_tag = "tether_excursion_transit_space" routes_to_make = list( /datum/shuttle_destination/excursion/virgo3b_sky = 30 SECONDS, @@ -274,13 +271,80 @@ /datum/shuttle_destination/excursion/virgo3b_sky name = "Skies of Virgo 3B" - my_area = /area/shuttle/excursion/virgo3b_sky + my_landmark = "tether_excursion_virgo3bsky" + +////////// Aliems!! +/obj/machinery/computer/shuttle_control/web/excursion/blue + name = "shuttle control console" + icon = 'icons/obj/flight_computer_vr.dmi' + icon_state = "center" + shuttle_tag = "Hybrid Shuttle" + req_access = list() + req_one_access = list(access_pilot) + wait_time = 0 + var/setup = FALSE + +/obj/machinery/computer/shuttle_control/web/excursion/blue/ui_interact() + if(!setup && alert("Steal the excursion shuttle's destinations and copy them to this shuttle?","Shuttle Setup","Yes","Cancel") == "Yes") + var/datum/shuttle/autodock/web_shuttle/HS = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/autodock/web_shuttle/ES = shuttle_controller.shuttles["Excursion Shuttle"] + if(!ES.web_master.destinations.len) + return + + // First, instantiate all the destination subtypes relevant to this datum. + for(var/new_type in ES.web_master.destinations) + var/datum/shuttle_destination/D = new_type + //if(D.skip_me) //Don't care + // continue + HS.web_master.destinations += new D.type(HS.web_master) + + // Now start the process of connecting all of them. + for(var/datum/shuttle_destination/D in HS.web_master.destinations) + for(var/type_to_link in D.routes_to_make) + var/travel_delay = D.routes_to_make[type_to_link] + D.link_destinations(HS.web_master.get_destination_by_type(type_to_link), D.preferred_interim_tag, travel_delay) + + HS.web_master.current_destination = HS.web_master.get_destination_by_type(/datum/shuttle_destination/excursion/deepish_space) + setup = TRUE + ..() + else + return ..() + +/datum/shuttle/autodock/web_shuttle/excursion/blue + name = "Hybrid Shuttle" + visible_name = "XN-39 Prototype" + warmup_time = 0 + current_location = "bluefo_start" + docking_controller_tag = "hybrid_shuttle_docker" + web_master_type = /datum/shuttle_web_master/excursion/blue + shuttle_area = /area/shuttle/blue_fo + abduct_chance = 0 + flags = SHUTTLE_FLAGS_NONE + +/datum/shuttle_web_master/excursion/blue + destination_class = /datum/shuttle_destination/excursion + starting_destination = /datum/shuttle_destination/excursion/deepish_space + +/datum/shuttle_web_master/excursion/blue/build_destinations() + return + +/datum/shuttle_destination/excursion/deepish_space + name = "Deepish Space" + my_landmark = "bluefo_start" + preferred_interim_tag = "tether_excursion_transit_space" + routes_to_make = list( + /datum/shuttle_destination/excursion/bluespace = 0 + ) + +/datum/shuttle_destination/excursion/deepish_space/link_destinations(var/datum/shuttle_destination/other_place, var/interim_tag, var/travel_time = 0) + var/datum/shuttle_route/new_route = new(src, other_place, interim_tag, travel_time) + routes += new_route ////////// Distant Destinations /datum/shuttle_destination/excursion/bluespace name = "Bluespace Jump" - my_area = /area/shuttle/excursion/bluespace - preferred_interim_area = /area/shuttle/excursion/space_moving + my_landmark = "tether_excursion_bluespace" + preferred_interim_tag = "tether_excursion_transit_space" // Heist /obj/machinery/computer/shuttle_control/web/heist @@ -288,14 +352,14 @@ req_access = list(access_syndicate) shuttle_tag = "Skipjack" -/datum/shuttle/web_shuttle/heist +/datum/shuttle/autodock/web_shuttle/heist name = "Skipjack" + current_location = "skipjack_base" + shuttle_area = /area/shuttle/skipjack + web_master_type = /datum/shuttle_web_master/heist warmup_time = 0 can_cloak = TRUE cloaked = TRUE - current_area = /area/skipjack_station/start -// docking_controller_tag = "skipjack_shuttle" - web_master_type = /datum/shuttle_web_master/heist /datum/shuttle_web_master/heist destination_class = /datum/shuttle_destination/heist @@ -303,62 +367,38 @@ /datum/shuttle_destination/heist/root name = "Raider Outpost" - my_area = /area/skipjack_station/start - preferred_interim_area = /area/skipjack_station/transit - -// dock_target = "skipjack_base" + my_landmark = "skipjack_base" + preferred_interim_tag = "skipjack_transit" routes_to_make = list( - /datum/shuttle_destination/heist/outside_Tether = 1 MINUTE, - // /datum/shuttle_destination/heist/docked_Tether = 1 MINUTE + /datum/shuttle_destination/heist/outside_tether = 1 MINUTE ) -/datum/shuttle_destination/heist/outside_Tether +/datum/shuttle_destination/heist/outside_tether name = "NSB Adephagia - Nearby" - my_area = /area/skipjack_station/orbit - preferred_interim_area = /area/skipjack_station/transit + my_landmark = "skipjack_outside" + preferred_interim_tag = "skipjack_transit" routes_to_make = list( - /datum/shuttle_destination/heist/root = 1 MINUTE, - // /datum/shuttle_destination/heist/docked_Tether = 0 + /datum/shuttle_destination/heist/root = 1 MINUTE ) -/* -/datum/shuttle_destination/heist/docked_Tether - name = "NSB Adephagia - Arrivals Docking Port" - my_area = /area/skipjack_station/arrivals_dock - preferred_interim_area = /area/skipjack_station/transit - -// dock_target = "skipjack_shuttle_dock_airlock" - announcer = "NSB Adephagia Docking Computer" - - routes_to_make = list( - /datum/shuttle_destination/heist/root = 1 MINUTE, - /datum/shuttle_destination/heist/outside_Tether = 0 - ) - -/datum/shuttle_destination/heist/docked_SC/get_arrival_message() - return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock." - -/datum/shuttle_destination/heist/docked_SC/get_departure_message() - return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock." -*/ - // Ninja /obj/machinery/computer/shuttle_control/web/ninja name = "stealth shuttle control console" req_access = list(access_syndicate) shuttle_tag = "Ninja" -/datum/shuttle/web_shuttle/ninja +/datum/shuttle/autodock/web_shuttle/ninja name = "Ninja" visible_name = "Unknown Vessel" + current_location = "ninja_base" + shuttle_area = /area/shuttle/ninja + docking_controller_tag = "ninja_shuttle" + web_master_type = /datum/shuttle_web_master/ninja warmup_time = 0 can_cloak = TRUE cloaked = TRUE - current_area = /area/ninja_dojo/start - docking_controller_tag = "ninja_shuttle" - web_master_type = /datum/shuttle_web_master/ninja /datum/shuttle_web_master/ninja destination_class = /datum/shuttle_destination/ninja @@ -366,45 +406,21 @@ /datum/shuttle_destination/ninja/root name = "Dojo Outpost" - my_area = /area/ninja_dojo/start - preferred_interim_area = /area/ninja_dojo/transit - - dock_target = "ninja_base" + my_landmark = "ninja_base" + preferred_interim_tag = "ninja_transit" routes_to_make = list( - /datum/shuttle_destination/ninja/outside_Tether = 30 SECONDS, - // /datum/shuttle_destination/ninja/docked_Tether = 30 SECONDS + /datum/shuttle_destination/ninja/outside_tether = 30 SECONDS ) -/datum/shuttle_destination/ninja/outside_Tether +/datum/shuttle_destination/ninja/outside_tether name = "NSB Adephagia - Nearby" - my_area = /area/ninja_dojo/orbit - preferred_interim_area = /area/ninja_dojo/transit + my_landmark = "ninja_outside" + preferred_interim_tag = "ninja_transit" routes_to_make = list( - /datum/shuttle_destination/ninja/root = 30 SECONDS, - // /datum/shuttle_destination/ninja/docked_Tether = 0 + /datum/shuttle_destination/ninja/root = 30 SECONDS ) -/* -/datum/shuttle_destination/ninja/docked_Tether - name = "NSB Adephagia - Arrivals Docking Port" - my_area = /area/ninja_dojo/arrivals_dock - preferred_interim_area = /area/ninja_dojo/transit - - dock_target = "ninja_shuttle_dock_airlock" - announcer = "NSB Adephagia Docking Computer" - - routes_to_make = list( - /datum/shuttle_destination/ninja/root = 30 SECONDS, - /datum/shuttle_destination/ninja/outside_Tether = 0 - ) - -/datum/shuttle_destination/syndie/docked_SC/get_arrival_message() - return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock." - -/datum/shuttle_destination/syndie/docked_SC/get_departure_message() - return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock." -*/ //////////////////////////////////// //////// Specops Shuttle /////////// @@ -416,10 +432,11 @@ req_access = list() req_one_access = list(access_cent_specops) -/datum/shuttle/web_shuttle/specialops +/datum/shuttle/autodock/web_shuttle/specialops name = "Special Operations Shuttle" visible_name = "NDV Phantom" - current_area = /area/shuttle/specialops/centcom + current_location = "specops_base" + shuttle_area = /area/shuttle/specialops docking_controller_tag = "specops_shuttle_hatch" web_master_type = /datum/shuttle_web_master/specialops can_rename = FALSE @@ -432,10 +449,9 @@ /datum/shuttle_destination/specialops/tether name = "NSB Adephagia Docking Arm 2" - my_area = /area/shuttle/specialops/tether - preferred_interim_area = /area/shuttle/specialops/transit + my_landmark = "specops_tether" + preferred_interim_tag = "specops_transit" - dock_target = "specops_dock" radio_announce = 1 announcer = "A.L.I.C.E." @@ -452,8 +468,8 @@ /datum/shuttle_destination/specialops/centcom name = "Central Command" - my_area = /area/shuttle/specialops/centcom - preferred_interim_area = /area/shuttle/specialops/transit + my_landmark = "specops_base" + preferred_interim_tag = "specops_transit" routes_to_make = list( /datum/shuttle_destination/specialops/tether = 15 diff --git a/maps/virgo_minitest/virgo_minitest-1.dmm b/maps/virgo_minitest/virgo_minitest-1.dmm index 2dd49b4af0..c7ea795dd8 100644 --- a/maps/virgo_minitest/virgo_minitest-1.dmm +++ b/maps/virgo_minitest/virgo_minitest-1.dmm @@ -339,9 +339,59 @@ "gA" = (/obj/structure/grille,/turf/simulated/floor/tiled,/area/bridge) "gB" = (/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor/tiled,/area/bridge) "gC" = (/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled,/area/bridge) -"gD" = (/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/tiled,/area/bridge) +"gD" = (/turf/simulated/shuttle/wall/voidcraft/blue,/area/shuttle/webdemo) "gE" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/bridge) "gF" = (/obj/machinery/ntnet_relay,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"gG" = (/turf/simulated/shuttle/wall,/area/shuttle/ferrydemo) +"gH" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/ferrydemo) +"gI" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/floor/tiled,/area/bridge) +"gJ" = (/obj/effect/shuttle_landmark/transit/ferrydemo_transit,/turf/space,/area/space) +"gK" = (/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"gL" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"gM" = (/obj/structure/shuttle,/turf/space,/area/space) +"gN" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/webdemo) +"gO" = (/obj/structure/bed/chair{dir = 1},/obj/effect/shuttle_landmark/station_dockpoint,/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"gP" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"gQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{id_tag = "station_dock1"; layer = 3.1; pixel_y = 28},/turf/simulated/floor/tiled,/area/bridge) +"gR" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "webdemo_docker_hatch"; locked = 1},/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"gS" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/shuttle/ferrydemo) +"gT" = (/obj/effect/shuttle_landmark/transit/multidemo_transit,/turf/space,/area/space) +"gU" = (/obj/structure/shuttle,/turf/simulated/shuttle/wall,/area/shuttle/ferrydemo) +"gV" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating,/area/shuttle/ferrydemo) +"gW" = (/obj/effect/shuttle_landmark/shared_space,/turf/space,/area/space) +"gX" = (/turf/simulated/shuttle/wall/voidcraft/blue,/area/shuttle/multidemo) +"gY" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/multidemo) +"gZ" = (/obj/effect/shuttle_landmark/ferrydemo_space,/turf/space,/area/space) +"ha" = (/obj/effect/shuttle_landmark/multidemo_nearby,/turf/space,/area/space) +"hb" = (/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"hc" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"hd" = (/obj/machinery/light,/obj/machinery/embedded_controller/radio/simple_docking_controller{id_tag = "ferrydemo_shuttle"; layer = 3.1; pixel_x = -28},/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"he" = (/obj/structure/bed/chair{dir = 1},/obj/effect/shuttle_landmark/multidemo_start,/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"hf" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"hg" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "station_dock1_hatch"; locked = 1},/turf/simulated/floor/tiled,/area/bridge) +"hh" = (/obj/machinery/computer/shuttle_control{name = "ferry-demo shuttle control console"; shuttle_tag = "Ferry-Demo"},/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"hi" = (/obj/structure/shuttle,/turf/simulated/shuttle/wall/voidcraft/blue,/area/shuttle/multidemo) +"hj" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"hk" = (/obj/machinery/computer/shuttle_control{dir = 8; name = "ferry-demo shuttle control console"; shuttle_tag = "Ferry-Demo"},/turf/simulated/floor/tiled,/area/bridge) +"hl" = (/obj/machinery/computer/shuttle_control/multi{dir = 8; name = "multi-demo shuttle control console"; shuttle_tag = "Multi-Demo"},/turf/simulated/floor/tiled,/area/bridge) +"hm" = (/obj/machinery/computer/shuttle_control/multi{name = "multi-demo shuttle control console"; shuttle_tag = "Multi-Demo"},/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"hn" = (/obj/machinery/light,/obj/machinery/embedded_controller/radio/simple_docking_controller{id_tag = "multidemo_shuttle"; layer = 3.1; pixel_x = -28},/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"ho" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "ferrydemo_shuttle_hatch"; locked = 1},/turf/simulated/shuttle/floor,/area/shuttle/ferrydemo) +"hp" = (/obj/effect/landmark{name = "JoinLate"},/obj/machinery/embedded_controller/radio/simple_docking_controller{id_tag = "station_hangar"; layer = 3.1; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/bridge) +"hq" = (/obj/effect/shuttle_landmark/transit/webdemo_transit,/turf/space,/area/space) +"hr" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "multidemo_shuttle_hatch"; locked = 1},/turf/simulated/shuttle/floor,/area/shuttle/multidemo) +"hs" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"ht" = (/obj/machinery/light,/obj/machinery/embedded_controller/radio/simple_docking_controller{id_tag = "webdemo_docker"; layer = 3.1; pixel_x = -28},/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"hu" = (/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"hv" = (/obj/effect/shuttle_landmark/webdemo_faraway,/turf/space,/area/space) +"hw" = (/obj/structure/shuttle,/turf/simulated/shuttle/wall/voidcraft/blue,/area/shuttle/webdemo) +"hx" = (/obj/machinery/computer/shuttle_control/web{dir = 2; my_doors = list("webdemo_docker_hatch" = "Hatch"); name = "Web-Demo Console"; shuttle_tag = "Web-Demo"},/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"hy" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/computer/shuttle_control/web{dir = 8; name = "Web-Demo Remote Control"; shuttle_tag = "Web-Demo"},/turf/simulated/floor/tiled,/area/bridge) +"hz" = (/obj/structure/bed/chair{dir = 1},/obj/effect/shuttle_landmark/station_inside,/turf/simulated/shuttle/floor,/area/shuttle/webdemo) +"hA" = (/turf/space,/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating/carry,/area/shuttle/webdemo) +"hB" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/carry,/area/shuttle/webdemo) +"hC" = (/turf/space,/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating/carry,/area/shuttle/multidemo) +"hD" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/carry,/area/shuttle/multidemo) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -360,7 +410,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahqaaaaaaaaaaaaaaaaaaaaaaaaaagJaaaaaaaaaaaaaaaaaaaaaagTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -376,12 +426,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabajajajajayabababazazazazarasaAaBaBaBaB aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaCaDaEaFaGaHaIaJaKaKaKaKaLaMaNaBaBaBaOaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPaPaPaPaQaRaSaTaUaPaPaVaPaPaWaWaraXaYataZbabbbcbdbeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbfbfbgbhbibjbkblbmbnbobpaPaaaaarbqbrbsbsaBbtaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbubububvbubububvbubububfaPaaaaarbwbxbybzbAbBaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbubububvbubububvbubububfaPaaaaarbwbxbybzbAbBaraaaaaaaaaaaaaaaagMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbCbDbEbvbubfbubvbubFbGbfaPaaaabHanaobIbJamanbKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbubububvbubLbubvbubububfaPaaaaaaaabMbNbObMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbPbQbRbSbTbUbVbWbTbXbYbZcaaPaaaaaaaabMcbccbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfcdcebubvbubfbubvbucfcgbfaPaaaaaaaabMchcibMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbubububvbugFbubvbubububfaPaaaaaaaabMcjckbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbubububvbugFbubvbubububfaPaaaaaaaabMcjckbMaaaaaagWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfclcmcncobucpbucqcrcsctbfaPaaaaaaaabMcuccbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbfbfbfcvbfbfcwbfbfcxbfbfbfaPaaaaaaaabMcyczbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaaaaaaaabMcucAbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -404,17 +454,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacScFcFcFcFcIeFeGcEcF aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJcKePeQeReQeSdZeQeTejcKcJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadccCcCcCcCcDeUeVcBcCcCcCdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeWeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYeZeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYfaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagZaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYfaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXfbfceXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeWeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYeZeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXfdfeeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXfdfeeXaaaaaahvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMffeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYeZeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYfgeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhfififififififififififififjeWeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXfkfleXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMfmfnfofofpfofofqfofnfrfofofseOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYeZeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNftfufufvfufufwfufufxfufufufyeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYfaeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOfhfififififififififififififjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeXeYeZeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafzfAfAfAfAfBfCfDfEfAfAfAfFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafzfAfAfAfAfBfCfDfEfAfAfAfFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMfGeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfJfKfLfMfNfIfIfOfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfPfQfQfRfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfSfIfTfUfUfUfVfIfIfIfWfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -422,19 +472,19 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNeOeMaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaafXfYfYfYfYfYfYfYfYfYfYfZgagbgcfYfYgdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfIfIfIfIfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaagegfgfgfgggfghgigfgjgkgkglgmghgngfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfIfIfIfIfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfgfgfgfgfgfgfgpgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfSfIfIfIfIfIfIfIfIfIfWfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgqgrgrgrgrgrgsgtgtgugvgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfIfIfIfIfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfIfIfIfIfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIgwfIfIfIfIfIfIfIgwfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgxgfgygfgzgzgfgygfgxgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafEfAfAfAfAfAfAfAfAfAfAfAfBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgAgogfgfgfgfgfgfgvgAgfgfgvgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgBgfgCgfgDgDgfgCgfgBgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgvgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaagegfgEgfgfgfgEgfgfgfgfgEgfgfgfgEgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgqgrgrgrgrgrgsgtgtgugvgeaaaaaagGgHgHgGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfIfIfIfIfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgIgIgIgIgHhhgLgHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfIfIfIfIfIfIfIfIfIfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfgfgfgfgfgfgfgfgfgfgfgfhggQgfhghogOgPgHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIgwfIfIfIfIfIfIfIgwfIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgxgfgygfgzgzgfgygfgxgfgfgfgIgIgIgIgHhdgKgHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafEfAfAfAfAfAfAfAfAfAfAfAfBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgAgogfgfgfgfgfgfgvgAgfgfgvgeaaaagSgUgHgHgGgSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgBgfgCgfgfgfgfgCgfhpgfgfhkgeaaaagVaaaaaaaagVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgDgNgNgDgfgfgfgfgfgfgeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfgfgNhxhjgNgfgfgfgfgfhlgeaaaaaagXgYgYgXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgRhzhsgNgfgfgfgfgfgfgeaaaaaagYhmhcgYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfgfgNhthugNgfgfgfgfgfhygeaaaaaahrhehfgYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgfgfgfgfhAhwgNgNgDhAgfgfgfgfgfgeaaaaaagYhnhbgYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegogfgfgfgfhBgfgfgfgfhBgfgfgfgfgfgeaaaahChigYgYgXhCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaagegfgEgfgfgfgEgfgfgfgfgEgfgfgfgEgfgeaaaahDaaaaaaaahDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaagcfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/virgo_minitest/virgo_minitest.dm b/maps/virgo_minitest/virgo_minitest.dm index 8d15bf1021..f2f0c65077 100644 --- a/maps/virgo_minitest/virgo_minitest.dm +++ b/maps/virgo_minitest/virgo_minitest.dm @@ -3,6 +3,7 @@ #include "virgo_minitest-1.dmm" #include "virgo_minitest_defines.dm" + #include "virgo_minitest_shuttles.dm" #define USING_MAP_DATUM /datum/map/virgo_minitest diff --git a/maps/virgo_minitest/virgo_minitest_shuttles.dm b/maps/virgo_minitest/virgo_minitest_shuttles.dm new file mode 100644 index 0000000000..b8c669494c --- /dev/null +++ b/maps/virgo_minitest/virgo_minitest_shuttles.dm @@ -0,0 +1,170 @@ +/* +** Shared Landmark Defs +*/ + +// Shared landmark for docking at the station +/obj/effect/shuttle_landmark/station_dockpoint + name = "Station Docking Point" + landmark_tag = "nav_station_docking" + docking_controller = "station_dock1" + base_turf = /turf/space + base_area = /area/space + +// Shared landmark for docking *inside* the station +/obj/effect/shuttle_landmark/station_inside + name = "Internal Hangar" + landmark_tag = "nav_station_inside" + docking_controller = "station_hangar" + base_turf = /turf/simulated/floor/tiled + base_area = /area/bridge + +/obj/effect/shuttle_landmark/shared_space + name = "Somewhere In Space" + landmark_tag = "nav_shared_space" + base_turf = /turf/space + base_area = /area/space + +// +// Ferry Demo Shuttle +// + +/datum/shuttle/autodock/ferry/ferrydemo + name = "Ferry-Demo" + warmup_time = 0 + shuttle_area = /area/shuttle/ferrydemo + docking_controller_tag = "ferrydemo_shuttle" + landmark_station = "nav_station_docking" + landmark_offsite = "nav_ferrydemo_space" + +/area/shuttle/ferrydemo + name = "Ferry-Demo Suttle" + music = "music/escape.ogg" + icon_state = "shuttle" + +/obj/effect/shuttle_landmark/ferrydemo_space + name = "Ferry-Demo Space Hover Point" + landmark_tag = "nav_ferrydemo_space" + flags = SLANDMARK_FLAG_AUTOSET + +/obj/effect/shuttle_landmark/transit/ferrydemo_transit + name = "Ferry-Demo Transient Point" + landmark_tag = "nav_ferrydemo_transit" + flags = SLANDMARK_FLAG_AUTOSET + +// /obj/machinery/computer/shuttle_control/power_change() +// log_debug("[src].power_change() - area=[get_area(src)] powered=[powered(power_channel)]") +// . = ..() + + +// +// MULTI DEMO SHUTTLE +// + +/datum/shuttle/autodock/multi/multidemo + name = "Multi-Demo" + warmup_time = 0 + shuttle_area = /area/shuttle/multidemo + docking_controller_tag = "multidemo_shuttle" + current_location = "nav_multidemo_start" + destination_tags = list("nav_multidemo_start", "nav_shared_space", "nav_station_docking", "nav_multidemo_nearby") + can_cloak = TRUE + +/area/shuttle/multidemo + name = "Multi-Demo Suttle" + music = "music/escape.ogg" + icon_state = "shuttlegrn" + +/obj/effect/shuttle_landmark/multidemo_start + name = "Multi-Demo Starting Point" + landmark_tag = "nav_multidemo_start" + base_turf = /turf/space + base_area = /area/space + +/obj/effect/shuttle_landmark/multidemo_nearby + name = "Multi-Demo Starting Point" + landmark_tag = "nav_multidemo_nearby" + flags = SLANDMARK_FLAG_AUTOSET + +/obj/effect/shuttle_landmark/transit/multidemo_transit + name = "Multi-Demo Transient Point" + landmark_tag = "nav_multidemo_transit" + flags = SLANDMARK_FLAG_AUTOSET + + +// +// WEB DEMO SHUTTLE +// + +/area/shuttle/webdemo + name = "Web-Demo Suttle" + icon_state = "shuttlered" + music = "music/escape.ogg" + +/datum/shuttle/autodock/web_shuttle/webdemo + name = "Web-Demo" + warmup_time = 0 + shuttle_area = /area/shuttle/webdemo + current_location = "nav_station_inside" + docking_controller_tag = "webdemo_docker" + web_master_type = /datum/shuttle_web_master/webdemo + +/datum/shuttle_web_master/webdemo + destination_class = /datum/shuttle_destination/webdemo + starting_destination = /datum/shuttle_destination/webdemo/inside_bridge + +// +// inside_bridge--\ +// |---nearby_bridge---faraway +// docked_bridge--/ +// + +/datum/shuttle_destination/webdemo/inside_bridge + name = "inside the Bridge" + my_landmark = "nav_station_inside" + radio_announce = TRUE + announcer = "Shuttle Authority" + +/datum/shuttle_destination/webdemo/inside_bridge/get_arrival_message() + return "Attention, [master.my_shuttle.visible_name] has arrived at the [name]." + +/datum/shuttle_destination/webdemo/inside_bridge/get_departure_message() + return "Attention, [master.my_shuttle.visible_name] has departed from [name]." + + +/datum/shuttle_destination/webdemo/docked_bridge + name = "Bridge docking pylon" + my_landmark = "nav_station_docking" + radio_announce = TRUE + announcer = "Shuttle Authority" + +/datum/shuttle_destination/webdemo/docked_bridge/get_arrival_message() + return "Attention, [master.my_shuttle.visible_name] has arrived at [name]." + +/datum/shuttle_destination/webdemo/docked_bridge/get_departure_message() + return "Attention, [master.my_shuttle.visible_name] has departed from [name]." + + +/obj/effect/shuttle_landmark/transit/webdemo_transit + name = "Web-Demo Transient Point" + landmark_tag = "nav_webdemo_transit" + flags = SLANDMARK_FLAG_AUTOSET + +/datum/shuttle_destination/webdemo/nearby_bridge + name = "nearby the Bridge" + my_landmark = "nav_shared_space" + preferred_interim_tag = "nav_webdemo_transit" + routes_to_make = list( + /datum/shuttle_destination/webdemo/inside_bridge = 0, + /datum/shuttle_destination/webdemo/docked_bridge = 0, + /datum/shuttle_destination/webdemo/faraway = 30 SECONDS + ) + +/obj/effect/shuttle_landmark/webdemo_faraway + name = "\"Deep\" Space" + landmark_tag = "nav_webdemo_faraway" + flags = SLANDMARK_FLAG_AUTOSET + +/datum/shuttle_destination/webdemo/faraway + name = "far away" + my_landmark = "nav_webdemo_faraway" + preferred_interim_tag = "nav_webdemo_transit" diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index bb63d3631c..48cf80b860 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -99,6 +99,11 @@ var/list/all_maps = list() var/datum/spawnpoint/spawnpoint_stayed = /datum/spawnpoint/cryo // Used if you end the round on the station. // VOREStation Edit End + var/use_overmap = 0 // If overmap should be used (including overmap space travel override) + var/overmap_size = 20 // Dimensions of overmap zlevel if overmap is used. + var/overmap_z = 0 // If 0 will generate overmap zlevel on init. Otherwise will populate the zlevel provided. + var/overmap_event_areas = 0 // How many event "clouds" will be generated + var/lobby_icon = 'icons/misc/title.dmi' // The icon which contains the lobby image(s) var/list/lobby_screens = list("mockingjay00") // The list of lobby screen to pick() from. If left unset the first icon state is always selected. diff --git a/nano/templates/shuttle_control_console_multi.tmpl b/nano/templates/shuttle_control_console_multi.tmpl new file mode 100644 index 0000000000..df25132bc7 --- /dev/null +++ b/nano/templates/shuttle_control_console_multi.tmpl @@ -0,0 +1,84 @@ +

Shuttle Status

+
+
+ {{:data.shuttle_status}} +
+ {{if data.can_cloak}} +
+ {{:data.legit ? "ATC Inhibitor" : "Cloaking Field"}} is {{:data.cloaked ? "enabled" : "disabled"}}. {{:helper.link('Toggle', 'arrowreturn-1-s', {'toggle_cloaked' : '1'}) }} +
+ {{/if}} +
+
+
+
+ Bluespace Drive: +
+
+ {{if data.shuttle_state == "idle"}} + IDLE + {{else data.shuttle_state == "warmup"}} + SPINNING UP + {{else data.shuttle_state == "in_transit"}} + ENGAGED + {{else}} + ERROR + {{/if}} +
+
+
+{{if data.has_docking}} +
+
+
+ Docking Status: +
+
+ {{if data.docking_status == "docked"}} + DOCKED + {{else data.docking_status == "docking"}} + {{if !data.docking_override}} + DOCKING + {{else}} + DOCKING-MANUAL + {{/if}} + {{else data.docking_status == "undocking"}} + {{if !data.docking_override}} + UNDOCKING + {{else}} + UNDOCKING-MANUAL + {{/if}} + {{else data.docking_status == "undocked"}} + UNDOCKED + {{else}} + ERROR + {{/if}} +
+
+ Docking Codes: +
+
+ {{:helper.link(data.docking_codes ? data.docking_codes : 'Not set', null, {'set_codes' : '1'}, null , null)}} +
+
+
+{{/if}} +
+
+ Current Destination: +
+ {{:data.destination_name}} +
+ {{:helper.link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, data.can_pick ? null : 'disabled' , null)}} +
+
+

Shuttle Control

+
+
+
+ {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}} + {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} + {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redButton' : null)}} +
+
+
diff --git a/sound/effects/shuttles/shuttle_landing.ogg b/sound/effects/shuttles/shuttle_landing.ogg new file mode 100644 index 0000000000..fcb723416b Binary files /dev/null and b/sound/effects/shuttles/shuttle_landing.ogg differ diff --git a/sound/effects/shuttles/shuttle_takeoff.ogg b/sound/effects/shuttles/shuttle_takeoff.ogg new file mode 100644 index 0000000000..06dac1c788 Binary files /dev/null and b/sound/effects/shuttles/shuttle_takeoff.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 04cac73a7a..b5bdba3061 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -338,6 +338,8 @@ #include "code\datums\observation\logged_in.dm" #include "code\datums\observation\moved.dm" #include "code\datums\observation\observation.dm" +#include "code\datums\observation\shuttle_added.dm" +#include "code\datums\observation\shuttle_moved.dm" #include "code\datums\observation\turf_changed.dm" #include "code\datums\observation\unequipped.dm" #include "code\datums\observation\z_moved.dm" @@ -510,6 +512,7 @@ #include "code\game\area\Away Mission areas.dm" #include "code\game\area\Space Station 13 areas.dm" #include "code\game\area\Space Station 13 areas_vr.dm" +#include "code\game\area\ss13_deprecated_areas.dm" #include "code\game\dna\dna2.dm" #include "code\game\dna\dna2_domutcheck.dm" #include "code\game\dna\dna2_helpers.dm" @@ -898,6 +901,7 @@ #include "code\game\mecha\combat\marauder.dm" #include "code\game\mecha\combat\phazon.dm" #include "code\game\mecha\equipment\mecha_equipment.dm" +#include "code\game\mecha\equipment\mecha_equipment_dynamicprocs.dm" #include "code\game\mecha\equipment\tools\armor_melee.dm" #include "code\game\mecha\equipment\tools\armor_ranged.dm" #include "code\game\mecha\equipment\tools\cable_layer.dm" @@ -907,10 +911,13 @@ #include "code\game\mecha\equipment\tools\energy_relay.dm" #include "code\game\mecha\equipment\tools\extinguisher.dm" #include "code\game\mecha\equipment\tools\generator.dm" +#include "code\game\mecha\equipment\tools\hardpoint_actuator.dm" +#include "code\game\mecha\equipment\tools\inflatables.dm" #include "code\game\mecha\equipment\tools\jetpack.dm" #include "code\game\mecha\equipment\tools\medigun_vr.dm" #include "code\game\mecha\equipment\tools\orescanner.dm" #include "code\game\mecha\equipment\tools\passenger.dm" +#include "code\game\mecha\equipment\tools\powertool.dm" #include "code\game\mecha\equipment\tools\rcd.dm" #include "code\game\mecha\equipment\tools\repair_droid.dm" #include "code\game\mecha\equipment\tools\shield.dm" @@ -919,8 +926,8 @@ #include "code\game\mecha\equipment\tools\syringe_gun.dm" #include "code\game\mecha\equipment\tools\teleporter.dm" #include "code\game\mecha\equipment\tools\tools.dm" +#include "code\game\mecha\equipment\tools\weldinglaser.dm" #include "code\game\mecha\equipment\tools\wormhole.dm" -#include "code\game\mecha\equipment\tools\wrench.dm" #include "code\game\mecha\equipment\weapons\honk.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\equipment\weapons\ballistic\automatic.dm" @@ -1323,6 +1330,7 @@ #include "code\game\objects\structures\salvageable.dm" #include "code\game\objects\structures\signs.dm" #include "code\game\objects\structures\simple_doors.dm" +#include "code\game\objects\structures\simple_doors_vr.dm" #include "code\game\objects\structures\snowman.dm" #include "code\game\objects\structures\stasis_cage.dm" #include "code\game\objects\structures\tank_dispenser.dm" @@ -1378,6 +1386,7 @@ #include "code\game\objects\structures\ghost_pods\silicon.dm" #include "code\game\objects\structures\ghost_pods\silicon_vr.dm" #include "code\game\objects\structures\props\alien_props.dm" +#include "code\game\objects\structures\props\alien_props_vr.dm" #include "code\game\objects\structures\props\beam_prism.dm" #include "code\game\objects\structures\props\blackbox.dm" #include "code\game\objects\structures\props\fake_ai.dm" @@ -2188,6 +2197,7 @@ #include "code\modules\mining\ore_datum_vr.dm" #include "code\modules\mining\resonator_vr.dm" #include "code\modules\mining\shelter_atoms.dm" +#include "code\modules\mining\shelter_atoms_vr.dm" #include "code\modules\mining\shelters.dm" #include "code\modules\mining\drilling\drill.dm" #include "code\modules\mining\drilling\scanner.dm" @@ -2223,6 +2233,7 @@ #include "code\modules\mob\update_icons.dm" #include "code\modules\mob\_modifiers\aura.dm" #include "code\modules\mob\_modifiers\cloning.dm" +#include "code\modules\mob\_modifiers\fire.dm" #include "code\modules\mob\_modifiers\medical.dm" #include "code\modules\mob\_modifiers\modifiers.dm" #include "code\modules\mob\_modifiers\modifiers_misc.dm" @@ -2835,13 +2846,9 @@ #include "code\modules\organs\subtypes\vox_vr.dm" #include "code\modules\organs\subtypes\xenos.dm" #include "code\modules\overmap\_defines.dm" +#include "code\modules\overmap\overmap_object.dm" #include "code\modules\overmap\sectors.dm" -#include "code\modules\overmap\ships\ship.dm" -#include "code\modules\overmap\ships\computers\engine_control.dm" -#include "code\modules\overmap\ships\computers\helm.dm" -#include "code\modules\overmap\ships\computers\shuttle.dm" -#include "code\modules\overmap\ships\engines\engine.dm" -#include "code\modules\overmap\ships\engines\thermal.dm" +#include "code\modules\overmap\spacetravel.dm" #include "code\modules\paperwork\adminpaper.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" @@ -2886,6 +2893,7 @@ #include "code\modules\power\powernet.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\smes_construction.dm" +#include "code\modules\power\smes_vr.dm" #include "code\modules\power\solar.dm" #include "code\modules\power\terminal.dm" #include "code\modules\power\tracker.dm" @@ -3179,8 +3187,11 @@ #include "code\modules\shuttles\crashes.dm" #include "code\modules\shuttles\departmental.dm" #include "code\modules\shuttles\escape_pods.dm" +#include "code\modules\shuttles\landmarks.dm" #include "code\modules\shuttles\shuttle.dm" +#include "code\modules\shuttles\shuttle_autodock.dm" #include "code\modules\shuttles\shuttle_console.dm" +#include "code\modules\shuttles\shuttle_console_multi.dm" #include "code\modules\shuttles\shuttle_emergency.dm" #include "code\modules\shuttles\shuttle_ferry.dm" #include "code\modules\shuttles\shuttle_specops.dm"